{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f6041f4e-5d12-41c2-8af3-fa80e9856c36",
   "metadata": {},
   "source": [
    "# Neural Network - Time Series - ECG\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f2ad35a-22de-4246-b6d4-f10eb303f96a",
   "metadata": {},
   "source": [
    "Authors:  \n",
    "Algot von Reybekiel"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ac8099a-0299-4209-842b-4f8c3306aa8b",
   "metadata": {},
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "034a53e5-045e-4293-b55d-a99efbce5bd8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd \n",
    "import matplotlib as mp\n",
    "import sklearn as sk\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import wfdb\n",
    "import ast\n",
    "import utility_functions as utility\n",
    "import torch\n",
    "import time "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b2389ad8-7d1d-4581-82be-5f60361799a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<module 'utility_functions' from 'C:\\\\Users\\\\algot\\\\ML_python\\\\assignment2\\\\utility_functions.py'>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import importlib\n",
    "#Reloads my utility module (is used after updating its methods)\n",
    "importlib.reload(utility)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b3d2639-65d8-4c85-8ad3-b7993ecb6105",
   "metadata": {},
   "source": [
    "## Load Data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7552e644-4d13-4422-b909-4eb3326cf8eb",
   "metadata": {},
   "source": [
    "(DONT READ THIS): Note for myself: wfdb.rdrecord: it automatically loads both the .hea (header file) and the .dat (data file) associated with the record. The .hea file contains metadata about the recording, such as the number of signals, the sampling frequency, and the names of the data files, while the .dat file contains the actual signal data."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e9b721a-cb99-4098-8b25-5c2a475c7858",
   "metadata": {},
   "source": [
    "Loads in data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ed14b333-3671-4ea8-ae41-59cf6564b448",
   "metadata": {},
   "outputs": [],
   "source": [
    "path = ''   #path/to/ptbxl\n",
    "sampling_rate=100\n",
    "\n",
    "# load and convert annotation data\n",
    "Y = pd.read_csv(path+'ptbxl_database.csv', index_col='ecg_id')\n",
    "Y.scp_codes = Y.scp_codes.apply(lambda x: ast.literal_eval(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3d92d3de-593f-41aa-88d1-1c2ba8d89ee7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load raw signal data\n",
    "X = utility.load_raw_data(Y, sampling_rate, path)\n",
    "\n",
    "# Load scp_statements.csv for diagnostic aggregation\n",
    "agg_df = pd.read_csv(path+'scp_statements.csv', index_col=0)\n",
    "agg_df = agg_df[agg_df.diagnostic == 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "12d08cfc-b19d-4062-a716-98ff4a5c3c7c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Apply diagnostic superclass\n",
    "Y['diagnostic_superclass'] = Y.scp_codes.apply(lambda x: utility.aggregate_diagnostic(x, agg_df))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "290c8302-dcd0-4306-8eef-4f3196b6a085",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nr of empty lists: 407\n",
      "percent of empty lists in relation to all lists: 1.8638091312909282 %\n"
     ]
    }
   ],
   "source": [
    "#printing nr of empty lists\n",
    "num_empty_lists = Y['diagnostic_superclass'].apply(lambda x: len(x) == 0).sum()\n",
    "total_elements = Y['diagnostic_superclass'].apply(lambda x: len(x) >= 0).sum()\n",
    "print(\"nr of empty lists:\",num_empty_lists)\n",
    "print(\"percent of empty lists in relation to all lists:\",num_empty_lists*100/total_elements, \"%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56916d19-3320-4eb1-a5dd-fc4238c0604a",
   "metadata": {},
   "source": [
    "I Remove all empty lists in Y and remove the X elements corresponding to the removed Y elements. I do this because there's so few entries that are empty, only 1,8%. And I could not find any information about these entries so it was difficult to assess the usefulness of them. And I thought they'd just introduce noise into the model. You could argue that the information is worth keeping however, and separate them into an 'unknown'-label."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "8b706523-5a89-4091-add2-8d2f0704a0de",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Remove rows with empty 'diagnostic_superclass' lists from Y\n",
    "Y_filtered = Y[Y['diagnostic_superclass'].apply(lambda x: len(x) > 0)]\n",
    "Y_filtered  = Y_filtered.reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b19c0b69-5e9f-4724-bf12-9bfb156b996c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load raw signal data corresponding to filtered Y values.\n",
    "X_filtered = utility.load_raw_data(Y_filtered, sampling_rate, path)\n",
    "\n",
    "# Load scp_statements.csv for diagnostic aggregation\n",
    "agg_df = pd.read_csv(path+'scp_statements.csv', index_col=0)\n",
    "agg_df = agg_df[agg_df.diagnostic == 1]\n",
    "#alternatively, convert X to df, then remove \n",
    "#corresponding entries through indexes from filtered_y, then convert back to numpy array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "807258a0-5a1a-4f3e-ae91-f4993d4b3d1f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The filtered datasets have the same length.\n"
     ]
    }
   ],
   "source": [
    "#checking that X and Y are the same length after filtering:\n",
    "\n",
    "if len(Y_filtered) == len(X_filtered):\n",
    "    print(\"The filtered datasets have the same length.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b59171a-eb5f-4f92-8e91-3006d9ab40b5",
   "metadata": {},
   "source": [
    "I'm reducing the amount of data used in every entry in X, due to me having a slow computer. I tested with and without using the filtered X value, and the output of the model wasn't changed significantly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "359955d3-18db-4094-be0e-5910a5d94849",
   "metadata": {},
   "outputs": [],
   "source": [
    "#reducing data in X\n",
    "X_small = X_filtered[:, :200, :,]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "09b80602-18b9-4c35-b320-658ea78607aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "#create copies of X,Y\n",
    "Y_copy = Y_filtered.copy()\n",
    "X_copy = X_small.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "485acfa9-4afd-409b-a439-6c0d2ca1fd83",
   "metadata": {},
   "outputs": [],
   "source": [
    "# reset the index to ensure it's continuous and starts from 0\n",
    "Y_copy.reset_index(drop=True, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "id": "a5101828-5628-4c0a-b234-503c33882407",
   "metadata": {},
   "outputs": [],
   "source": [
    "#tabular data for merging with X. I'll process y_tab later.\n",
    "y_tab = Y_copy.copy() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "d3ee7df3-47d8-465c-9e2d-861685827ba0",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "diagnostic_superclass\n",
       "[NORM]                 9083\n",
       "[MI]                   2538\n",
       "[STTC]                 2406\n",
       "[CD]                   1709\n",
       "[MI, CD]               1302\n",
       "[HYP, STTC]             783\n",
       "[MI, STTC]              602\n",
       "[HYP]                   536\n",
       "[CD, STTC]              472\n",
       "[CD, NORM]              407\n",
       "[MI, HYP, STTC]         362\n",
       "[CD, HYP]               238\n",
       "[MI, CD, STTC]          223\n",
       "[MI, HYP]               183\n",
       "[HYP, STTC, CD]         113\n",
       "[MI, HYP, STTC, CD]     104\n",
       "[MI, CD, HYP]            98\n",
       "[CD, STTC, HYP]          98\n",
       "[HYP, CD]                62\n",
       "[MI, CD, STTC, HYP]      54\n",
       "[STTC, NORM]             28\n",
       "[MI, HYP, CD]            19\n",
       "[CD, NORM, STTC]          5\n",
       "[CD, NORM, HYP]           2\n",
       "[HYP, NORM]               2\n",
       "[MI, CD, NORM, HYP]       1\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_copy.diagnostic_superclass.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ddbc1dc2-00bf-48f5-8a6e-0f6d9a2e0d76",
   "metadata": {},
   "source": [
    "I tested removing the rare cases like [STTC, NORM, CD], \n",
    "[NORM, CD, HYP,\r\n",
    "[NORM, HY,2\r\n",
    "[NORM, MI, CD, H. However it did not signiciantly impact the model, so i'm leaving them be. Also, it might be good to include rare cases as well. The benefit of using label-classification is that the rare cases don't introduce more classes. Using label-classificatn therefore perhaps tolerates more rare cases.. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dcf89d0e-4b8b-4aa3-a00e-a924516dcf62",
   "metadata": {},
   "source": [
    "## Encode Y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00981732-c3f6-430d-88ec-39a6fb55c6da",
   "metadata": {},
   "source": [
    "One-hot Encoding with Multiple Labels\n",
    "What i'm doing:\n",
    "1.Flatten the Labels: First, create a set of all unique labels across all samples, disregarding the list structure.\n",
    "2.Create a Binary Vector for Each Sample\n",
    "\n",
    "MultiLabelBinarizer is designed to handle cases where each sample can belong to multiple categories, which makes it good for the diagnostic_superclass data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "87a20e96-4b2e-42a3-bfb6-ee93a67f60a7",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MultiLabelBinarizer\n",
    "\n",
    "# (Y_copy.diagnostic_superclass contains the lists of labels)\n",
    "\n",
    "# Flatten the list of labels and remove duplicates\n",
    "all_labels = set(label for sublist in Y_copy.diagnostic_superclass for label in sublist)\n",
    "\n",
    "# Initialize MultiLabelBinarizer\n",
    "mlb = MultiLabelBinarizer(classes=sorted(all_labels))\n",
    "\n",
    "# Fit and transform the labels to one-hot encoded format\n",
    "# Note: This step automatically removes empty lists and treats them as samples with no labels\n",
    "Y_encoded = mlb.fit_transform(Y_copy.diagnostic_superclass)\n",
    "\n",
    "# Convert the encoded labels back to a DataFrame for easier handling\n",
    "Y_encoded_df = pd.DataFrame(Y_encoded, columns=mlb.classes_, index=Y_copy.index)\n",
    "\n",
    "# Now, Y_encoded_df is a DataFrame where each column represents a unique label (diagnostic_superclass)\n",
    "# and each row has binary indicators for the presence of each label.\n",
    "\n",
    "#reset index for Y_encoded_df\n",
    "Y_encoded_df = Y_encoded_df.reset_index(drop=True) #is never used"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1bcf6467-ca69-41ff-bca7-72122d7c3775",
   "metadata": {},
   "source": [
    "## Data Cleaning for tabular data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "913f6265-7169-4b09-aba9-5b695788fcac",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>patient_id</th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>height</th>\n",
       "      <th>weight</th>\n",
       "      <th>nurse</th>\n",
       "      <th>site</th>\n",
       "      <th>device</th>\n",
       "      <th>recording_date</th>\n",
       "      <th>report</th>\n",
       "      <th>...</th>\n",
       "      <th>baseline_drift</th>\n",
       "      <th>static_noise</th>\n",
       "      <th>burst_noise</th>\n",
       "      <th>electrodes_problems</th>\n",
       "      <th>extra_beats</th>\n",
       "      <th>pacemaker</th>\n",
       "      <th>strat_fold</th>\n",
       "      <th>filename_lr</th>\n",
       "      <th>filename_hr</th>\n",
       "      <th>diagnostic_superclass</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>15709.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>63.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>CS-12   E</td>\n",
       "      <td>1984-11-09 09:17:34</td>\n",
       "      <td>sinusrhythmus periphere niederspannung</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>, I-V1,</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3</td>\n",
       "      <td>records100/00000/00001_lr</td>\n",
       "      <td>records500/00000/00001_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>13243.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>70.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>CS-12   E</td>\n",
       "      <td>1984-11-14 12:55:37</td>\n",
       "      <td>sinusbradykardie sonst normales ekg</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>records100/00000/00002_lr</td>\n",
       "      <td>records500/00000/00002_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>20372.0</td>\n",
       "      <td>37.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>69.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>CS-12   E</td>\n",
       "      <td>1984-11-15 12:49:10</td>\n",
       "      <td>sinusrhythmus normales ekg</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5</td>\n",
       "      <td>records100/00000/00003_lr</td>\n",
       "      <td>records500/00000/00003_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>17014.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>82.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>CS-12   E</td>\n",
       "      <td>1984-11-15 13:44:57</td>\n",
       "      <td>sinusrhythmus normales ekg</td>\n",
       "      <td>...</td>\n",
       "      <td>, II,III,AVF</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3</td>\n",
       "      <td>records100/00000/00004_lr</td>\n",
       "      <td>records500/00000/00004_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>17448.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>70.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>CS-12   E</td>\n",
       "      <td>1984-11-17 10:43:15</td>\n",
       "      <td>sinusrhythmus normales ekg</td>\n",
       "      <td>...</td>\n",
       "      <td>, III,AVR,AVF</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>records100/00000/00005_lr</td>\n",
       "      <td>records500/00000/00005_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21425</th>\n",
       "      <td>17180.0</td>\n",
       "      <td>67.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>AT-60    3</td>\n",
       "      <td>2001-05-31 09:14:35</td>\n",
       "      <td>ventrikulÄre extrasystole(n) sinustachykardie ...</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>, alles,</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1ES</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7</td>\n",
       "      <td>records100/21000/21833_lr</td>\n",
       "      <td>records500/21000/21833_hr</td>\n",
       "      <td>[STTC]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21426</th>\n",
       "      <td>20703.0</td>\n",
       "      <td>93.0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>AT-60    3</td>\n",
       "      <td>2001-06-05 11:33:39</td>\n",
       "      <td>sinusrhythmus lagetyp normal qrs(t) abnorm    ...</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4</td>\n",
       "      <td>records100/21000/21834_lr</td>\n",
       "      <td>records500/21000/21834_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21427</th>\n",
       "      <td>19311.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>AT-60    3</td>\n",
       "      <td>2001-06-08 10:30:27</td>\n",
       "      <td>sinusrhythmus lagetyp normal t abnorm in anter...</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>, I-AVR,</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>records100/21000/21835_lr</td>\n",
       "      <td>records500/21000/21835_hr</td>\n",
       "      <td>[STTC]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21428</th>\n",
       "      <td>8873.0</td>\n",
       "      <td>64.0</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>AT-60    3</td>\n",
       "      <td>2001-06-09 18:21:49</td>\n",
       "      <td>supraventrikulÄre extrasystole(n) sinusrhythmu...</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>SVES</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>records100/21000/21836_lr</td>\n",
       "      <td>records500/21000/21836_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21429</th>\n",
       "      <td>11744.0</td>\n",
       "      <td>68.0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>AT-60    3</td>\n",
       "      <td>2001-06-11 16:43:01</td>\n",
       "      <td>sinusrhythmus p-sinistrocardiale lagetyp norma...</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>, I-AVL,</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9</td>\n",
       "      <td>records100/21000/21837_lr</td>\n",
       "      <td>records500/21000/21837_hr</td>\n",
       "      <td>[NORM]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>21430 rows × 28 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       patient_id   age  sex  height  weight  nurse  site      device  \\\n",
       "0         15709.0  56.0    1     NaN    63.0    2.0   0.0   CS-12   E   \n",
       "1         13243.0  19.0    0     NaN    70.0    2.0   0.0   CS-12   E   \n",
       "2         20372.0  37.0    1     NaN    69.0    2.0   0.0   CS-12   E   \n",
       "3         17014.0  24.0    0     NaN    82.0    2.0   0.0   CS-12   E   \n",
       "4         17448.0  19.0    1     NaN    70.0    2.0   0.0   CS-12   E   \n",
       "...           ...   ...  ...     ...     ...    ...   ...         ...   \n",
       "21425     17180.0  67.0    1     NaN     NaN    1.0   2.0  AT-60    3   \n",
       "21426     20703.0  93.0    0     NaN     NaN    1.0   2.0  AT-60    3   \n",
       "21427     19311.0  59.0    1     NaN     NaN    1.0   2.0  AT-60    3   \n",
       "21428      8873.0  64.0    1     NaN     NaN    1.0   2.0  AT-60    3   \n",
       "21429     11744.0  68.0    0     NaN     NaN    1.0   2.0  AT-60    3   \n",
       "\n",
       "            recording_date                                             report  \\\n",
       "0      1984-11-09 09:17:34             sinusrhythmus periphere niederspannung   \n",
       "1      1984-11-14 12:55:37                sinusbradykardie sonst normales ekg   \n",
       "2      1984-11-15 12:49:10                         sinusrhythmus normales ekg   \n",
       "3      1984-11-15 13:44:57                         sinusrhythmus normales ekg   \n",
       "4      1984-11-17 10:43:15                         sinusrhythmus normales ekg   \n",
       "...                    ...                                                ...   \n",
       "21425  2001-05-31 09:14:35  ventrikulÄre extrasystole(n) sinustachykardie ...   \n",
       "21426  2001-06-05 11:33:39  sinusrhythmus lagetyp normal qrs(t) abnorm    ...   \n",
       "21427  2001-06-08 10:30:27  sinusrhythmus lagetyp normal t abnorm in anter...   \n",
       "21428  2001-06-09 18:21:49  supraventrikulÄre extrasystole(n) sinusrhythmu...   \n",
       "21429  2001-06-11 16:43:01  sinusrhythmus p-sinistrocardiale lagetyp norma...   \n",
       "\n",
       "       ...  baseline_drift static_noise burst_noise electrodes_problems  \\\n",
       "0      ...             NaN    , I-V1,           NaN                 NaN   \n",
       "1      ...             NaN          NaN         NaN                 NaN   \n",
       "2      ...             NaN          NaN         NaN                 NaN   \n",
       "3      ...    , II,III,AVF          NaN         NaN                 NaN   \n",
       "4      ...   , III,AVR,AVF          NaN         NaN                 NaN   \n",
       "...    ...             ...          ...         ...                 ...   \n",
       "21425  ...             NaN   , alles,           NaN                 NaN   \n",
       "21426  ...             NaN          NaN         NaN                 NaN   \n",
       "21427  ...             NaN   , I-AVR,           NaN                 NaN   \n",
       "21428  ...             NaN          NaN         NaN                 NaN   \n",
       "21429  ...             NaN   , I-AVL,           NaN                 NaN   \n",
       "\n",
       "       extra_beats  pacemaker  strat_fold                filename_lr  \\\n",
       "0              NaN        NaN           3  records100/00000/00001_lr   \n",
       "1              NaN        NaN           2  records100/00000/00002_lr   \n",
       "2              NaN        NaN           5  records100/00000/00003_lr   \n",
       "3              NaN        NaN           3  records100/00000/00004_lr   \n",
       "4              NaN        NaN           4  records100/00000/00005_lr   \n",
       "...            ...        ...         ...                        ...   \n",
       "21425          1ES        NaN           7  records100/21000/21833_lr   \n",
       "21426          NaN        NaN           4  records100/21000/21834_lr   \n",
       "21427          NaN        NaN           2  records100/21000/21835_lr   \n",
       "21428         SVES        NaN           8  records100/21000/21836_lr   \n",
       "21429          NaN        NaN           9  records100/21000/21837_lr   \n",
       "\n",
       "                     filename_hr diagnostic_superclass  \n",
       "0      records500/00000/00001_hr                [NORM]  \n",
       "1      records500/00000/00002_hr                [NORM]  \n",
       "2      records500/00000/00003_hr                [NORM]  \n",
       "3      records500/00000/00004_hr                [NORM]  \n",
       "4      records500/00000/00005_hr                [NORM]  \n",
       "...                          ...                   ...  \n",
       "21425  records500/21000/21833_hr                [STTC]  \n",
       "21426  records500/21000/21834_hr                [NORM]  \n",
       "21427  records500/21000/21835_hr                [STTC]  \n",
       "21428  records500/21000/21836_hr                [NORM]  \n",
       "21429  records500/21000/21837_hr                [NORM]  \n",
       "\n",
       "[21430 rows x 28 columns]"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_tab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "id": "ffcdd2aa-238a-441d-82ea-e7c4a807040d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            Null Counts  Percentage\n",
      "age                  85    0.396640\n",
      "sex                   0    0.000000\n",
      "height            14503   67.676155\n",
      "weight            12056   56.257583\n",
      "site                 17    0.079328\n",
      "device                0    0.000000\n",
      "heart_axis            0    0.000000\n"
     ]
    }
   ],
   "source": [
    "\n",
    "#show null values for y_tab\n",
    "\n",
    "null_counts = y_tab.isnull().sum()\n",
    "\n",
    "# Calculate the percentage of total values that are null for each column\n",
    "null_percentage = (y_tab.isnull().sum() / len(y_tab)) * 100\n",
    "\n",
    "# Combine the counts and percentages into a single DataFrame for a clearer view\n",
    "null_stats = pd.DataFrame({'Null Counts': null_counts, 'Percentage': null_percentage})\n",
    "\n",
    "# Display the stats\n",
    "print(null_stats)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "747622b9-01a7-42c3-9f78-9fb69c5544b2",
   "metadata": {},
   "source": [
    "I removed columns with high % null values, as well as other unecessary pieces of information such as id, filenames, also 'report' and 'diagnostic superclass' which we must remove. I'm keeping height and weight even though they have high % of null values, as I believe you can impute them more easily than the other columns. You could infer average height from age, sex and weight, and average weight from height, age and sex."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "4d158ae6-da4d-41fe-80d7-9bf3ef1fb120",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "y_tab = y_tab.drop(['infarction_stadium1', 'infarction_stadium2','baseline_drift',\n",
    "                   'burst_noise', 'electrodes_problems', 'extra_beats', \n",
    "                    'pacemaker', 'filename_lr', 'filename_hr',  'diagnostic_superclass',\n",
    "                   'patient_id', 'static_noise', 'scp_codes', 'report',\n",
    "                   'strat_fold'], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9db4596-8f65-4a9c-9425-99bea1f17b17",
   "metadata": {},
   "source": [
    "Here I'm removing things which I dont think have much to do with your ECG results. E.g. which nurse the patient was validated by shouldn't affect which diagnosis you have. And even if it does have an effect on the output of the model, we don't want that information as we want our model to be more generalizeable, not just predicting the bias each nurse adds. Some things like 'second_opinion', and 'validated_by_human' could have an affect though.\n",
    "\n",
    "I also removed recording_date, as it had too many non-INT entries. In recording_date, you could break the entries down to smaller time chunks though, like year, month, day, hour in order to keep the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "id": "606dd283-86dd-4e81-8c99-9a442da46da7",
   "metadata": {},
   "outputs": [],
   "source": [
    "#dropping columns\n",
    "y_tab = y_tab.drop(['recording_date','nurse', 'validated_by'], axis=1)\n",
    "y_tab = y_tab.drop(['second_opinion','initial_autogenerated_report', 'validated_by_human'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "id": "5b6de4d2-d3be-4528-ab4d-52132baf10a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "age           float64\n",
       "sex             int64\n",
       "height        float64\n",
       "weight        float64\n",
       "site          float64\n",
       "device         object\n",
       "heart_axis     object\n",
       "dtype: object"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_tab.dtypes\n",
    "#for column in y_tab.columns:\n",
    "#    print(f\"Unique values in '{column}': {y_tab[column].unique()}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "id": "55852a48-b2c0-4902-9ca3-8a1596560a17",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "#encode columns with object type in y_tab and save it to y_tab2\n",
    "\n",
    "y_tab2=y_tab.copy()\n",
    "# Initialize the encoder\n",
    "encoder = LabelEncoder()\n",
    "# Apply the encoder to the 'device' column\n",
    "y_tab2['device'] = encoder.fit_transform(y_tab['device'])\n",
    "#save the mapping or the encoder itself for inverse transforming or future use\n",
    "device_mapping = {index: label for index, label in enumerate(encoder.classes_)}\n",
    "\n",
    "# Apply the encoder to the 'heart_axis' column\n",
    "y_tab2['heart_axis'] = encoder.fit_transform(y_tab['heart_axis'])\n",
    "heart_axis_mapping = {index: label for index, label in enumerate(encoder.classes_)}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "id": "9e7b394d-ada4-4192-a3b5-822f11450ee9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "age           float64\n",
       "sex             int64\n",
       "height        float64\n",
       "weight        float64\n",
       "site          float64\n",
       "device          int32\n",
       "heart_axis      int32\n",
       "dtype: object"
      ]
     },
     "execution_count": 194,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_tab2.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "id": "68e78eb0-9a06-41bd-9d01-2cb2af5c0816",
   "metadata": {},
   "outputs": [],
   "source": [
    "#convert floats to int, but keep all Null values (for imputation)\n",
    "placeholder = -1 \n",
    "y_tab2['age'] = y_tab2['age'].replace(placeholder, pd.NA).astype('Int64')\n",
    "y_tab2['height'] = y_tab2['height'].replace(placeholder, pd.NA).astype('Int64')\n",
    "y_tab2['weight'] = y_tab2['weight'].replace(placeholder, pd.NA).astype('Int64')\n",
    "y_tab2['site'] = y_tab2['site'].replace(placeholder, pd.NA).astype('Int64')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "id": "76c1186e-8fd8-46a1-83d8-7c49e28538bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "age           Int64\n",
       "sex           int32\n",
       "height        Int64\n",
       "weight        Int64\n",
       "site          Int64\n",
       "device        int32\n",
       "heart_axis    int32\n",
       "dtype: object"
      ]
     },
     "execution_count": 205,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_tab2.dtypes"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "37a79685-de85-4d08-a649-b93aca98600a",
   "metadata": {},
   "source": [
    "use imputator to find height, and weight, and age "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "id": "61b32f76-35d6-4a87-a737-bbfe2bca2188",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.impute import KNNImputer\n",
    "\n",
    "# Initialize the imputer\n",
    "imputer = KNNImputer(n_neighbors=5) \n",
    "\n",
    "# Fit the imputer and transform y_tab to fill in missing values\n",
    "y_tab_imputed = imputer.fit_transform(y_tab2)\n",
    "\n",
    "# in order to get the dataframe (not neccesary)\n",
    "y_tab_imputed_df = pd.DataFrame(y_tab_imputed, columns=y_tab2.columns, index=y_tab2.index)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "id": "408538dc-31bf-43ab-8609-531fd22bc9e8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            Null Counts  Percentage\n",
      "age                   0         0.0\n",
      "sex                   0         0.0\n",
      "height                0         0.0\n",
      "weight                0         0.0\n",
      "site                  0         0.0\n",
      "device                0         0.0\n",
      "heart_axis            0         0.0\n"
     ]
    }
   ],
   "source": [
    "\n",
    "#show null values for y_tab_imputed_df\n",
    "\n",
    "null_counts = y_tab_imputed_df.isnull().sum()\n",
    "\n",
    "# Calculate the percentage of total values that are null for each column\n",
    "null_percentage = (y_tab_imputed_df.isnull().sum() / len(y_tab)) * 100\n",
    "\n",
    "# Combine the counts and percentages into a single DataFrame for a clearer view\n",
    "null_stats = pd.DataFrame({'Null Counts': null_counts, 'Percentage': null_percentage})\n",
    "\n",
    "# Display the stats\n",
    "print(null_stats)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e81ab2ef-8d82-44fe-be45-c1a833a5f6bc",
   "metadata": {},
   "source": [
    "checking validity of imputed values:\n",
    "they have similar distribution for age which is a good sign"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "id": "96bc910f-74dc-492d-b3ce-86b94830fc48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAGdCAYAAADjWSL8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAySUlEQVR4nO3dfVyVdZ7/8ffh7gAKR8HgwIRlxZqF3QxOCOumjYI2kTXOjk42lDuu2Vgqo45lNoXzM/DRzBi7WlbmpuvN0M5ONm1bLFiT5qJitGxqjt2R6QyICQIGwhGu3x8t13TCG46Ahy++no8HjwfnOp/rur7X+YC8/V7XOZfDsixLAAAAhgnw9wAAAADOByEGAAAYiRADAACMRIgBAABGIsQAAAAjEWIAAICRCDEAAMBIhBgAAGCkIH8PoKe0tbXpL3/5iyIiIuRwOPw9HAAA0AmWZamhoUHx8fEKCDj7XEufDTF/+ctflJCQ4O9hAACA83Do0CFdeumlZ63psyEmIiJC0lcvQmRkZKfW8Xg8KioqUkZGhoKDg3tyeDgDeuB/9MD/6IH/0QP/qa+vV0JCgv13/Gz6bIhpP4UUGRnpU4gJDw9XZGQkP7R+Qg/8jx74Hz3wP3rgf525FIQLewEAgJEIMQAAwEiEGAAAYKQ+e00MAODiY1mWTp06pdbW1i5tx+PxKCgoSCdPnuzytuAtMDBQQUFB3fLxJ4QYAECf0NLSosrKSjU2NnZ5W5Zlye1269ChQ3zWWA8IDw9XXFycQkJCurQdQgwAwHhtbW2qqKhQYGCg4uPjFRIS0qXw0dbWphMnTqh///7n/MA1dJ5lWWppadHRo0dVUVGhxMTELr2+hBgAgPFaWlrU1tamhIQEhYeHd3l7bW1tamlpUWhoKCGmm4WFhSk4OFgHDx60X+PzRWcAAH0GgcMM3dUnug0AAIxEiAEAwFCfffaZHA6HysvLO73O2rVrNWDAAL+PoztwTQwAoE97qvhDn9exLEvNzc1yOp0+XyD8s/S/8Xl/hw4dUk5Ojt544w198cUXiouL05133qnHHntM0dHRZ1wvISFBlZWVGjRoUKf3NWXKFH3ve9/zeYy9ETMxAAD40aeffqoRI0boww8/1G9/+1t9/PHHevbZZ/Xmm28qNTVVNTU1p12vpaVFgYGBcrvdCgrq/JxEWFiYYmJiumv4fkWIAQDAjx544AGFhISoqKhIo0eP1uDBg3Xrrbdqy5Yt+vOf/6zFixdLki6//HItXbpU06ZNk8vl0owZM057GufVV19VYmKiwsLCdMstt2jdunVyOBw6fvy4pI6nk3JycnTDDTdo/fr1uvzyy+VyufSjH/1IDQ0Ndk1hYaFGjRqlAQMGKDo6WpmZmfrkk08uxMtzVoQYAAD8pKamRv/1X/+lWbNmKSwszOs5t9utu+++Wy+99JIsy5Ik/epXv1JSUpLKysr0i1/8osP2PvvsM/393/+97rzzTpWXl2vmzJl2CDqbTz75RK+88opee+01vfbaa9q6dauWLVtmP//ll19q3rx52r17t958800FBATo+9//vtra2rr4CnQN18QAwIXyx7zO1VkBkq6W3lkuOfz7R0K3LPLv/vu4jz76SJZladiwYad9ftiwYaqtrdXRo0clSd/97ne1YMEC+/nPPvvMq/7ZZ5/V0KFD9atf/UqSNHToUO3du1dPPPHEWcfR1tamtWvXKiIiQpKUlZWlN998017vBz/4gVf9mjVrFBMTow8++EBJSUmdP+BuRogBgAtkx6fHOlXX5giUoqXSz2oUYPn3vj2pt/h19xe99hmY9ouLR4wYcdb6AwcO6Dvf+Y7Xsptuuumc+7n88svtACNJcXFxqq6uth9/8skn+sUvfqGdO3fqiy++sGdgPv/8c7+GGE4nAQDgJ1dddZUcDoc++OCD0z7/pz/9SQMHDrTffdSvX7+zbs+yrA7vpmoPQmcTHBzs9djhcHidKrr99tt17NgxrV69Wrt27dKuXbskfXVxsT/5FGJycnLkcDi8vtxut/28ZVnKyclRfHy8wsLCNGbMGO3bt89rG83NzZo9e7YGDRqkfv36aeLEiTp8+LBXTW1trbKysuRyueRyuZSVlWVfkAQAQF8RHR2t9PR0PfPMM2pqavJ6rqqqShs3btSUKVM6/Tbvq6++Wrt37/Za9u6773ZpjMeOHdP+/fv16KOPauzYsfYprt7A55mYa6+9VpWVlfbXnj177OeefPJJLV++XCtXrtTu3bvldruVnp7udYVzdna2Nm/erIKCAm3fvl0nTpxQZmam163Op06dqvLychUWFqqwsFDl5eXKysrq4qECAND7rFy5Us3NzRo/fry2bdumQ4cOqbCwUOnp6frWt751zutZvm7mzJn605/+pIceekgf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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_tab2['age'].dropna().hist(alpha=0.5, label='Original')\n",
    "y_tab_imputed_df['age'].hist(alpha=0.5, label='Imputed')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "id": "b9d19d94-997a-466b-813f-633f0ffcbe00",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index([    0,     1,     2,     3,     4,     5,     6,     7,     8,     9,\n",
      "       ...\n",
      "       21420, 21421, 21422, 21423, 21424, 21425, 21426, 21427, 21428, 21429],\n",
      "      dtype='int64', length=14812)\n"
     ]
    }
   ],
   "source": [
    "# Find indices with any missing value in y_tab2\n",
    "indices_with_missing_values = y_tab2[y_tab2.isnull().any(axis=1)].index\n",
    "# Print the indices\n",
    "print(indices_with_missing_values)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f27b0d7-4789-4af9-bf28-37f55fa9b670",
   "metadata": {},
   "source": [
    "using these indices to see the height and weight that the KNN has imputed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b394bd0d-832d-41fc-a63b-3935b3f3d408",
   "metadata": {},
   "outputs": [],
   "source": [
    "indices_with_missing_values= [21420, 21421, 21422, 21423, 21424, 21425, 21426, 21427, 21428, 21429]\n",
    "print(y_tab2.loc[indices_with_missing_values])\n",
    "print(y_tab_imputed_df.loc[indices_with_missing_values])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1410198e-8afc-4727-a272-0043ea456282",
   "metadata": {},
   "source": [
    "hmm, there seems to be quite a lot of varience of the imputed values. \n",
    "especially concering is the imputation of patients with both height and\n",
    "weight missing at the same time. As it might be more inaccurate then. \n",
    "But normal distribution seemed fine."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ade1a87f-7a58-4dec-b162-bd3c6b1ab9c4",
   "metadata": {},
   "source": [
    "## Normalize"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23c4a08d-73fb-4ede-a156-d2a0d1c35213",
   "metadata": {},
   "source": [
    "Normalize data in order to prevent biases (so that features with higher magnitude dont dominate the learning process). I got worse overall precision by normalising (without tabular data), however the same score for everything else. However normalizing is necessary to combine tabular data with time series data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "da53d023-68c0-4a44-a716-d9d03bcba06b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "#normalize X\n",
    "# I need to compute the mean and std deviation across all samples\n",
    "\n",
    "# Flatten the data to compute global mean and std dev (it's multidimensional per sample)\n",
    "X_flattened = X_copy.reshape(-1, X_copy.shape[-1])  # Reshape to 2D if it's not already (keeps the last dimension intact)\n",
    "\n",
    "mean = X_flattened.mean(axis=0)  # Compute mean for each channel/feature\n",
    "std = X_flattened.std(axis=0)  # Compute std for each channel/feature\n",
    "\n",
    "# Broadcast the mean and std to match the shape of X_copy for element-wise operations\n",
    "X_normalized = (X_copy - mean) / std\n",
    "\n",
    "# If std is 0 for some features (leading to division by zero), you can add a small epsilon for stability\n",
    "epsilon = 1e-10\n",
    "X_normalized = (X_copy - mean) / (std + epsilon)\n",
    "X_copy= X_normalized\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7854a53c-2432-4553-bb6e-2bcd2a96244b",
   "metadata": {},
   "source": [
    "Combining the tabular data form y and time series from X by:\n",
    "1. Normalize or standardize both the tabular and time series data.\r",
    "2. \n",
    "For each sample, replicate the tabular data so that it matches the time dimension of the time series data.3. \r\n",
    "Concatenate the tabular data with the time series data along the feature dimension."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "id": "b2ba508c-4729-4c19-8ea7-5dbe4d244488",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "#normalize tabular data in y.\n",
    "# Initialize the scaler\n",
    "scaler = StandardScaler()\n",
    "\n",
    "# Fit the scaler to the data and transform it\n",
    "y_tab_normalized = scaler.fit_transform(y_tab_imputed_df)\n",
    "\n",
    "# Convert the normalized array back to a DataFrame (optional, but useful for keeping column names)\n",
    "y_tab_normalized_df = pd.DataFrame(y_tab_normalized, columns=y_tab_imputed_df.columns, index=y_tab_imputed_df.index)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "id": "e1c5f832-f538-4907-a905-671a01f02992",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "# Assuming X_time_series is thr time series data of shape (num_samples, time_steps, num_features)\n",
    "# and X_tabular is tabular data of shape (num_samples, num_tabular_features)\n",
    "\n",
    "# Replicate tabular data to match time dimension\n",
    "y_tabular_replicated = np.repeat(y_tab_normalized[:, np.newaxis, :], X_copy.shape[1], axis=1)\n",
    "\n",
    "# Concatenate along the feature dimension\n",
    "X_combined = np.concatenate((X_copy, y_tabular_replicated), axis=2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "id": "cd46b637-ab73-492c-a087-55af481624ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of X_copy: (21430, 200, 19)\n",
      "Shape of y_tabular_replicated: (21430, 200, 7)\n",
      "Shape of X_combined: (21430, 200, 19)\n",
      "Expected number of features: 26\n"
     ]
    }
   ],
   "source": [
    "#verify successful combination of time series and tabular data:\n",
    "\n",
    "print(\"Shape of X_copy:\", X_copy.shape)\n",
    "print(\"Shape of y_tabular_replicated:\", y_tabular_replicated.shape)\n",
    "print(\"Shape of X_combined:\", X_combined.shape)\n",
    "\n",
    "# Calculate the expected number of features after concatenation\n",
    "expected_num_features = X_copy.shape[2] + y_tab_normalized.shape[1]  # num_features_in_X_copy + num_features_in_y_tab_normalized\n",
    "\n",
    "print(\"Expected number of features:\", expected_num_features)\n",
    "\n",
    "#It added the 12 features from X with the 7 features from Y tabular. Good."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "id": "d69b130a-da27-45a0-82ad-77c0dc2b6790",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_copy=X_combined.copy()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85f9d887-6903-4ed7-a0c5-842c09997fe0",
   "metadata": {},
   "source": [
    "## test and validation sets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "id": "1e51f0fd-1f9d-4436-81f2-b07d67142404",
   "metadata": {},
   "outputs": [],
   "source": [
    "# reset the index to ensure it's continuous and starts from 0\n",
    "#Y_copy.reset_index(drop=True, inplace=True)\n",
    "#Y_encoded_df = Y_encoded_df.reset_index(drop=True) #is never used"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f713dc2-1a25-4a5b-8431-b22c72ec3507",
   "metadata": {},
   "source": [
    "split dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "id": "4221350b-54bb-4b13-a2e0-8bd9df397565",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "# Split data into train, test, and validation\n",
    "test_fold = 10\n",
    "val_fold = 9\n",
    "\n",
    "# Extract indices for validation, training, and test to ensure consistency\n",
    "val_indices = np.where(Y_copy.strat_fold == val_fold)[0]\n",
    "train_test_indices = np.where(Y_copy.strat_fold != val_fold)[0]\n",
    "test_indices = np.where(Y_copy.strat_fold == test_fold)[0]\n",
    "train_indices = np.where((Y_copy.strat_fold != val_fold) & (Y_copy.strat_fold != test_fold))[0]\n",
    "\n",
    "# Validation set\n",
    "X_val = X_copy[val_indices]\n",
    "y_val = Y_encoded[val_indices]\n",
    "\n",
    "# Train set\n",
    "X_train = X_copy[train_indices]\n",
    "y_train = Y_encoded[train_indices]\n",
    "\n",
    "# Test set\n",
    "X_test = X_copy[test_indices]\n",
    "y_test = Y_encoded[test_indices]\n"
   ]
  },
  {
   "cell_type": "raw",
   "id": "ea21de95-6ea4-4729-ad1f-0375ef6c68dd",
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "source": [
    "# OLD: Split data into train and test\n",
    "test_fold = 10\n",
    "# X Train & test\n",
    "X_train = X_copy[np.where(Y_copy.strat_fold != test_fold)]\n",
    "X_test = X_copy[np.where(Y_copy.strat_fold == test_fold)]\n",
    "\n",
    "# Split the one-hot encoded labels into train and test sets using the same condition based on 'strat_fold'\n",
    "y_train = Y_encoded[Y_copy.strat_fold != test_fold]\n",
    "y_test = Y_encoded[Y_copy.strat_fold == test_fold]\n",
    "\n",
    "#from sklearn.model_selection import train_test_split\n",
    "# Assuming you've already split X_copy and Y_encoded as shown above\n",
    "# Further split the training data to create a validation set\n",
    "X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "id": "f2d561e1-d218-456b-a1ba-2306c7d20583",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of folds: 10\n"
     ]
    }
   ],
   "source": [
    "#checking number of folds\n",
    "num_folds = Y_copy['strat_fold'].nunique()\n",
    "print(\"Number of folds:\", num_folds)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73983da9-e56b-4ace-9b5b-4843991909ee",
   "metadata": {},
   "source": [
    "using DataLoader for batching, shuffling, and loading the data in parallel."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "id": "a7e19d7c-8f8b-41fb-b877-a9e599d4d69b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.utils.data import Dataset, DataLoader\n",
    "#prepare the data.\n",
    "class ECGDataset(Dataset):\n",
    "    def __init__(self, X, y):\n",
    "        self.X = X\n",
    "        self.y = y\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.X)\n",
    "\n",
    "    #def __getitem__(self, idx):\n",
    "    #    return torch.tensor(self.X[idx], dtype=torch.float), torch.tensor(self.y[idx], dtype=torch.long)\n",
    "    def __getitem__(self, idx):\n",
    "        X_tensor = torch.tensor(self.X[idx], dtype=torch.float)\n",
    "        y_tensor = torch.tensor(self.y[idx], dtype=torch.float)  # Ensure labels are float\n",
    "        return X_tensor, y_tensor\n",
    "\n",
    "# Assuming y_train and y_test are already encoded as integers\n",
    "train_dataset = ECGDataset(X_train, y_train)\n",
    "test_dataset = ECGDataset(X_test, y_test)\n",
    "val_dataset = ECGDataset(X_val, y_val)\n",
    "\n",
    "train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True)\n",
    "test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False)\n",
    "val_loader = DataLoader(val_dataset, batch_size=128, shuffle=False)  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2476ae44-9493-4c96-b257-9f14a2c4deca",
   "metadata": {},
   "source": [
    "## Training"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8271d887-490d-4560-8289-3f0597bc0750",
   "metadata": {},
   "source": [
    "Define an LSTM model (NOT IN USE) I thought it could be good to test encoding the tabular data separately and merging it with the LSTM's output, instead of merging the tabular data with time series data into one numpy array like I did in my other model. However I'm not using this one."
   ]
  },
  {
   "cell_type": "raw",
   "id": "cd8a1e79-2e6f-43f7-817c-e2030863ab29",
   "metadata": {},
   "source": [
    "class CombinedModel(nn.Module):\n",
    "    def __init__(self, num_features_ts, num_hidden_lstm, num_features_tabular, num_hidden_dense, num_classes):\n",
    "        super(CombinedModel, self).__init__()\n",
    "        self.lstm = nn.LSTM(input_size=num_features_ts, hidden_size=num_hidden_lstm, batch_first=True)\n",
    "        self.dense_tabular = nn.Sequential(\n",
    "            nn.Linear(num_features_tabular, num_hidden_dense),\n",
    "            nn.ReLU(),\n",
    "            nn.Dropout(0.5)\n",
    "        )\n",
    "        self.final_dense = nn.Linear(num_hidden_lstm + num_hidden_dense, num_classes)\n",
    "    \n",
    "    def forward(self, X_time_series, X_tabular):\n",
    "        lstm_out, _ = self.lstm(X_time_series)\n",
    "        lstm_out = lstm_out[:, -1, :]  # Consider using the last time step\n",
    "        tabular_out = self.dense_tabular(X_tabular)\n",
    "        combined = torch.cat((lstm_out, tabular_out), dim=1)\n",
    "        output = self.final_dense(combined)\n",
    "        return output\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e2660c1-c9ae-42f0-91ef-eb5dfb76526e",
   "metadata": {},
   "source": [
    "Define the LSTM Model (IN USE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "id": "a5b405cd-d134-44a4-a251-79dcd5bddac3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn as nn\n",
    "\n",
    "#dropout introduces randomness in the activations during training, \n",
    "#which helps prevent overfitting by ensuring that the network does not \n",
    "#become too dependent on any single neuron\n",
    "class SimpleLSTM(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size, num_layers, num_classes, dropout_rate=0.2):\n",
    "        super(SimpleLSTM, self).__init__()\n",
    "        self.hidden_size = hidden_size\n",
    "        self.num_layers = num_layers\n",
    "        # Define the LSTM layer\n",
    "        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True, dropout=dropout_rate if num_layers > 1 else 0.0)  # Dropout added only if num_layers > 1\n",
    "        \n",
    "        # Define the dropout layer\n",
    "        self.dropout = nn.Dropout(dropout_rate)\n",
    "        \n",
    "        # Define the final, fully-connected output layer\n",
    "        self.fc = nn.Linear(hidden_size, num_classes)\n",
    "        #self.classifier = nn.Linear(hidden_size, num_classes) #Man kan också ha denna. fast hidden_dim istället för hidden_size\n",
    "    \n",
    "    def forward(self, x):\n",
    "        # Initialize hidden and cell state\n",
    "        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)\n",
    "        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)\n",
    "        \n",
    "        # Forward propagate LSTM\n",
    "        out, _ = self.lstm(x, (h0, c0))\n",
    "        \n",
    "        # Apply dropout\n",
    "        out = self.dropout(out)\n",
    "        \n",
    "        # Decode the hidden state of the last time step\n",
    "        out = self.fc(out[:, -1, :])\n",
    "        return out\n",
    "\n",
    "\n",
    "#alternativ kod för forward:\n",
    "        #def forward(self, x):\n",
    "            # Get LSTM outputs (all hidden states, final hidden state, final cell state)\n",
    "            #all_hidden_states, (final_hidden_state, final_cell_state) = self.lstm(x)\n",
    "            # Apply dropout to the final hidden state\n",
    "            #final_hidden_state = self.dropout(final_hidden_state) \n",
    "            # Use only the last layer of the hidden state \n",
    "            #out = self.classifier(final_hidden_state[-1])\n",
    "            #out = torch.sigmoid(out)\n",
    "            #return out"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a1d2e10-fb13-4caf-9ca0-96139c799e15",
   "metadata": {},
   "source": [
    "LSTM without dropout (NOT USED ANYMORE)"
   ]
  },
  {
   "cell_type": "raw",
   "id": "4feda79e-aacd-439c-bd0b-603ecdc84344",
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "source": [
    "import torch.nn as nn\n",
    "# adjust input_size, hidden_size, and num_layers\n",
    "#without dropout\n",
    "\n",
    "class SimpleLSTM2(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size, num_layers, num_classes):\n",
    "        super(SimpleLSTM, self).__init__()\n",
    "        self.hidden_size = hidden_size\n",
    "        self.num_layers = num_layers\n",
    "        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)\n",
    "        self.fc = nn.Linear(hidden_size, num_classes)\n",
    "    \n",
    "    def forward(self, x):\n",
    "        # Initialize hidden and cell state\n",
    "        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)\n",
    "        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)\n",
    "        \n",
    "        # Forward propagate LSTM\n",
    "        out, _ = self.lstm(x, (h0, c0))\n",
    "        \n",
    "        # Decode the hidden state of the last time step\n",
    "        out = self.fc(out[:, -1, :])\n",
    "        return out\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63a7c025-6799-4642-ad4e-73df47aa3837",
   "metadata": {},
   "source": [
    "Make sure the y_train and y_test are class indices, not one-hot\n",
    "If they are one-hot encoded, convert them to class indices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "id": "ac4136a4-8fb7-451c-b7aa-02015d1e037c",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train_indices = np.argmax(y_train, axis=1) if y_train.ndim > 1 else y_train\n",
    "y_test_indices = np.argmax(y_test, axis=1) if y_test.ndim > 1 else y_test"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9fef09e1-240b-4919-a76f-4c9883f4ff58",
   "metadata": {},
   "source": [
    "Train the model (NOT IN USE, only used this one early on for creating a baseline model for comparison)"
   ]
  },
  {
   "cell_type": "raw",
   "id": "6458af9d-0496-4fd1-b700-7aae4352419d",
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "source": [
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "#NOT IN USE. Set number of epochs. Only used for baseline model once. \n",
    "\n",
    "# Adjust the model initialization if necessary\n",
    "model = SimpleLSTM(input_size=12, hidden_size=128, num_layers=2, num_classes=y_train.shape[1]).to(device)\n",
    "\n",
    "# Use CrossEntropyLoss for multi-class classification\n",
    "criterion = nn.CrossEntropyLoss()\n",
    "\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n",
    "\n",
    "# Update the dataset accordingly\n",
    "train_dataset = ECGDataset(X_train, y_train_indices)\n",
    "test_dataset = ECGDataset(X_test, y_test_indices)\n",
    "\n",
    "#timer for seeing how long each epoch takes\n",
    "start_time = time.time()\n",
    "total_epoch_time = 0  # Initialize total epoch time to calculate average later\n",
    "\n",
    "\n",
    "# Training loop\n",
    "num_epochs = 10\n",
    "for epoch in range(num_epochs):\n",
    "    epoch_start_time = time.time() #timer\n",
    "    \n",
    "    for inputs, labels in train_loader:\n",
    "        inputs, labels = inputs.to(device), labels.to(device)\n",
    "        \n",
    "        # Forward pass\n",
    "        outputs = model(inputs)\n",
    "        loss = criterion(outputs, labels)\n",
    "        \n",
    "        # Backward and optimize\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "    epoch_end_time = time.time()  # End time for the current epoch\n",
    "    epoch_duration = epoch_end_time - epoch_start_time\n",
    "    total_epoch_time += epoch_duration  # Accumulate total epoch time\n",
    "    average_time_per_epoch = total_epoch_time / (epoch + 1)\n",
    "    estimated_time_left = average_time_per_epoch * (num_epochs - epoch - 1)\n",
    "    \n",
    "    \n",
    "    #print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')\n",
    "    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}, Time for epoch: {epoch_duration:.2f}s, Estimated time left: {estimated_time_left:.2f}s')\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "id": "1f9d6419-c7f5-4b2f-9bc0-a0512fd9b076",
   "metadata": {},
   "outputs": [],
   "source": [
    "#CUDA test\n",
    "#import torch\n",
    "#print(torch.cuda.is_available())  # Should print True if CUDA is available\n",
    "#print(torch.cuda.device_count())  # Prints the number of GPUs available\n",
    "#print(torch.cuda.get_device_name(0))  # Prints the name of the GPU"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15662b65-cf57-4bf6-8f97-5f3eccffd21e",
   "metadata": {},
   "source": [
    "I train weights for label balancing. Without weights, my model predicted NORM (majority label) above the others."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "id": "2bf5486c-d85c-46d0-8692-005032fe393e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.utils.class_weight import compute_class_weight\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "\n",
    "# Assuming 'y_train' is a binary matrix of shape [n_samples, n_classes]\n",
    "class_weights = []\n",
    "for i in range(y_train.shape[1]):  # For each class\n",
    "    # Compute class weight for class i\n",
    "    weights = compute_class_weight(class_weight='balanced', classes=[0, 1], y=y_train[:, i])\n",
    "    class_weights.append(weights[1])  # We're interested in the weight for the \"positive\" class\n",
    "\n",
    "class_weights = torch.tensor(class_weights, dtype=torch.float).to(device)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "id": "c74b64fa-8b95-4d9b-9047-b1571f0e66f7",
   "metadata": {},
   "outputs": [],
   "source": [
    "#is used to validate a model during training\n",
    "def validate(model, val_loader, criterion, device):\n",
    "    model.eval()\n",
    "    total_loss = 0\n",
    "    with torch.no_grad():\n",
    "        for inputs, labels in val_loader:\n",
    "            inputs, labels = inputs.to(device), labels.to(device)\n",
    "            outputs = model(inputs)\n",
    "            loss = criterion(outputs, labels)\n",
    "            total_loss += loss.item()\n",
    "    avg_loss = total_loss / len(val_loader)\n",
    "    return avg_loss"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f8b0c3a-4f95-4e0c-aa78-0e0e19f849cc",
   "metadata": {},
   "source": [
    "Here I train the model. I used BCEWithLogitsLoss because it's used for multi-label classification and has a built in sigmoid function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 241,
   "id": "89b1a032-ad81-4036-a85b-200af114b922",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\programmering\\tools\\anaconda3\\envs\\testCuda2\\lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch [1/50], Training Loss: 0.6887, Validation Loss: 0.7107,  Time for epoch: 10.67s, Estimated time left: 522.93s\n",
      "Epoch [2/50], Training Loss: 0.6974, Validation Loss: 0.7112,  Time for epoch: 10.49s, Estimated time left: 507.87s\n",
      "Epoch [3/50], Training Loss: 0.8358, Validation Loss: 0.8079,  Time for epoch: 10.53s, Estimated time left: 496.50s\n",
      "Epoch [4/50], Training Loss: 0.7878, Validation Loss: 0.7396,  Time for epoch: 10.55s, Estimated time left: 485.72s\n",
      "Epoch [5/50], Training Loss: 0.6712, Validation Loss: 0.6820,  Time for epoch: 10.50s, Estimated time left: 474.62s\n",
      "Epoch [6/50], Training Loss: 0.7283, Validation Loss: 0.6906,  Time for epoch: 10.52s, Estimated time left: 463.89s\n",
      "Epoch [7/50], Training Loss: 0.6048, Validation Loss: 0.6726,  Time for epoch: 10.52s, Estimated time left: 453.19s\n",
      "Epoch [8/50], Training Loss: 0.6274, Validation Loss: 0.6357,  Time for epoch: 10.54s, Estimated time left: 442.67s\n",
      "Epoch [9/50], Training Loss: 0.6751, Validation Loss: 0.6174,  Time for epoch: 10.53s, Estimated time left: 432.11s\n",
      "Epoch [10/50], Training Loss: 0.5240, Validation Loss: 0.5887,  Time for epoch: 10.55s, Estimated time left: 421.62s\n",
      "Epoch [11/50], Training Loss: 0.5599, Validation Loss: 0.5898,  Time for epoch: 10.56s, Estimated time left: 411.16s\n",
      "Epoch [12/50], Training Loss: 0.5971, Validation Loss: 0.5740,  Time for epoch: 10.61s, Estimated time left: 400.83s\n",
      "Epoch [13/50], Training Loss: 0.4709, Validation Loss: 0.5545,  Time for epoch: 10.53s, Estimated time left: 390.22s\n",
      "Epoch [14/50], Training Loss: 0.5862, Validation Loss: 0.5491,  Time for epoch: 10.56s, Estimated time left: 379.70s\n",
      "Epoch [15/50], Training Loss: 0.5317, Validation Loss: 0.5421,  Time for epoch: 10.59s, Estimated time left: 369.25s\n",
      "Epoch [16/50], Training Loss: 0.4625, Validation Loss: 0.5295,  Time for epoch: 10.65s, Estimated time left: 358.91s\n",
      "Epoch [17/50], Training Loss: 0.4667, Validation Loss: 0.5251,  Time for epoch: 10.61s, Estimated time left: 348.46s\n",
      "Epoch [18/50], Training Loss: 0.5304, Validation Loss: 0.5240,  Time for epoch: 10.69s, Estimated time left: 338.13s\n",
      "Epoch [19/50], Training Loss: 0.4761, Validation Loss: 0.5040,  Time for epoch: 10.71s, Estimated time left: 327.80s\n",
      "Epoch [20/50], Training Loss: 0.4272, Validation Loss: 0.5058,  Time for epoch: 10.67s, Estimated time left: 317.37s\n",
      "Epoch [21/50], Training Loss: 0.3882, Validation Loss: 0.5113,  Time for epoch: 10.73s, Estimated time left: 307.00s\n",
      "Epoch [22/50], Training Loss: 0.4959, Validation Loss: 0.4871,  Time for epoch: 10.72s, Estimated time left: 296.58s\n",
      "Epoch [23/50], Training Loss: 0.4158, Validation Loss: 0.4995,  Time for epoch: 10.65s, Estimated time left: 286.06s\n",
      "Epoch [24/50], Training Loss: 0.4454, Validation Loss: 0.4935,  Time for epoch: 10.68s, Estimated time left: 275.56s\n",
      "Epoch [25/50], Training Loss: 0.5102, Validation Loss: 0.4927,  Time for epoch: 10.74s, Estimated time left: 265.10s\n",
      "Epoch [26/50], Training Loss: 0.3894, Validation Loss: 0.5024,  Time for epoch: 10.95s, Estimated time left: 254.82s\n",
      "Epoch [27/50], Training Loss: 0.4579, Validation Loss: 0.4945,  Time for epoch: 10.94s, Estimated time left: 244.47s\n",
      "Epoch [28/50], Training Loss: 0.4410, Validation Loss: 0.4963,  Time for epoch: 10.74s, Estimated time left: 233.93s\n",
      "Epoch [29/50], Training Loss: 0.3465, Validation Loss: 0.4897,  Time for epoch: 10.74s, Estimated time left: 223.37s\n",
      "Epoch [30/50], Training Loss: 0.4582, Validation Loss: 0.4936,  Time for epoch: 10.66s, Estimated time left: 212.75s\n",
      "Epoch [31/50], Training Loss: 0.3189, Validation Loss: 0.4944,  Time for epoch: 10.81s, Estimated time left: 202.22s\n",
      "Early stopping triggered!\n",
      "Best epoch: 22\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 241,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#training\n",
    "\n",
    "from torch.optim.lr_scheduler import StepLR\n",
    "from torch.optim.lr_scheduler import ReduceLROnPlateau\n",
    "\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "\n",
    "#The input_size=12 refers to the number of features each input sample has.\n",
    "#input size is 12 without tabular data\n",
    "#input size is 19 with tabular data.\n",
    "model = SimpleLSTM(input_size=19, hidden_size=128, num_layers=2, num_classes=y_train.shape[1]).to(device)\n",
    "criterion = nn.BCEWithLogitsLoss(pos_weight=class_weights) #using weights and BCEWithLogitsLoss \n",
    "\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n",
    "# Define the scheduler\n",
    "#scheduler = StepLR(optimizer, step_size=10, gamma=0.1)\n",
    "scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5, verbose=True)\n",
    "\n",
    "#timer for seeing how long each epoch takes\n",
    "start_time = time.time()\n",
    "total_epoch_time = 0  # Initialize total epoch time to calculate average later\n",
    "\n",
    "\n",
    "#variables for early stopping\n",
    "no_improvement_count = 0\n",
    "best_val_loss = 5000 # a really high number\n",
    "best_training_loss = 5000 # a really high number\n",
    "patience = 10 # the number of loops before an improvement in validation loss is accepted.\n",
    "train_loss_tolerance = 0.01  # Allow up to 1% increase in training loss\n",
    "\n",
    "\n",
    "#lists to keep track of training and validation losses\n",
    "training_losses = []\n",
    "validation_losses =[]\n",
    "\n",
    "\n",
    "# Training loop\n",
    "num_epochs = 50\n",
    "for epoch in range(num_epochs):\n",
    "    epoch_start_time = time.time() #timer\n",
    "    model.train()\n",
    "    for inputs, labels in train_loader:\n",
    "        inputs, labels = inputs.to(device), labels.to(device)\n",
    "        \n",
    "        # Forward pass\n",
    "        outputs = model(inputs)\n",
    "        loss = criterion(outputs, labels)\n",
    "        \n",
    "        # Backward and optimize\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "    val_loss = validate(model,val_loader, criterion, device)\n",
    "    train_loss = loss.item()\n",
    "    \n",
    "    training_losses.append(loss.item())\n",
    "    validation_losses.append(val_loss)\n",
    "    \n",
    "    scheduler.step(val_loss)\n",
    "    # using early stopping and model saving in order to prevent overfitting\n",
    "    if val_loss < best_val_loss and train_loss < best_training_loss:\n",
    "        best_val_loss = val_loss\n",
    "        train_loss = best_training_loss\n",
    "        best_model_state = model.state_dict()  # Save the current model state\n",
    "        best_epoch = epoch\n",
    "        no_improvement_count = 0\n",
    "    else:\n",
    "        no_improvement_count += 1\n",
    "    if no_improvement_count >= patience:\n",
    "        print(\"Early stopping triggered!\")\n",
    "        print(f\"Best epoch: {best_epoch + 1}\")\n",
    "        break\n",
    "\n",
    "    #time logic to see how much time has passed and is left etc.\n",
    "    epoch_end_time = time.time()  # End time for the current epoch\n",
    "    epoch_duration = epoch_end_time - epoch_start_time\n",
    "    total_epoch_time += epoch_duration  # Accumulate total epoch time\n",
    "    average_time_per_epoch = total_epoch_time / (epoch + 1)\n",
    "    estimated_time_left = average_time_per_epoch * (num_epochs - epoch - 1)\n",
    "    \n",
    "    print(f'Epoch [{epoch+1}/{num_epochs}], Training Loss: {loss.item():.4f}, Validation Loss: {val_loss:.4f},  Time for epoch: {epoch_duration:.2f}s, Estimated time left: {estimated_time_left:.2f}s')\n",
    "\n",
    "#load best model after training\n",
    "model.load_state_dict(best_model_state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "ac305de7-be8a-424a-84a9-6f9290699aad",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Save model\n",
    "\n",
    "# Save the model's state dictionary\n",
    "#torch.save(model.state_dict(), 'models/Lstm_53202403011000_state.pth')\n",
    "\n",
    "# Optionally, if you want to save the entire model (not recommended)\n",
    "#torch.save(model, 'models/Lstm_53202403011000_model.pth')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61a2d302-ac94-424e-96f0-04fa22118c3e",
   "metadata": {},
   "source": [
    "## Evaluate and visualize results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "id": "83a4b846-6d6a-481e-92b0-7effd5592e5d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIhCAYAAAB5deq6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADDvUlEQVR4nOzdd1RU19fG8e/M0DsoKijNLnbFHltijCYaTS9Go9H08jO9lze9xzRNVVNMYhLTE2PXmNh77zQFREWKdJh5/7gwiiLSB/X5rHUXM3du2QMobPY5+5hsNpsNEREREREROS2zowMQERERERGp65Q4iYiIiIiInIESJxERERERkTNQ4iQiIiIiInIGSpxERERERETOQImTiIiIiIjIGShxEhEREREROQMlTiIiIiIiImegxElEREREROQMlDiJiFSAyWQq17Z48eIq3ee5557DZDJV6tzFixdXSwx13dixYwkPDz/t64cOHcLFxYXrr7/+tMekp6fj4eHB5ZdfXu77Tp8+HZPJRExMTLljOZHJZOK5554r9/2KJSQk8Nxzz7Fhw4ZTXqvK90tVhYeHM2zYMIfcW0SkNjk5OgARkbPJ8uXLSzx/4YUXWLRoEQsXLiyxPzIyskr3mTBhAkOGDKnUuV26dGH58uVVjuFsFxgYyOWXX84vv/zC0aNH8ff3P+WY7777juzsbMaPH1+lez399NP873//q9I1ziQhIYH/+7//Izw8nE6dOpV4rSrfLyIiUj5KnEREKqBnz54lngcGBmI2m0/Zf7KsrCw8PDzKfZ8mTZrQpEmTSsXo4+NzxnjOF+PHj2fWrFnMmDGDe+6555TXp06dSsOGDbnsssuqdJ9mzZpV6fyqqsr3i4iIlI+G6omIVLMBAwbQrl07/vnnH3r37o2Hhwe33HILADNnzmTw4MEEBQXh7u5OmzZteOyxx8jMzCxxjdKGXhUPifr777/p0qUL7u7utG7dmqlTp5Y4rrShemPHjsXLy4s9e/Zw6aWX4uXlRUhICA8++CC5ubklzt+/fz9XX3013t7e+Pn5MWrUKFavXo3JZGL69OllvvdDhw5x1113ERkZiZeXFw0aNODCCy9k6dKlJY6LiYnBZDLx5ptv8vbbbxMREYGXlxe9evVixYoVp1x3+vTptGrVCldXV9q0acOXX35ZZhzFLrnkEpo0acK0adNOeW379u2sXLmSMWPG4OTkxLx58xgxYgRNmjTBzc2N5s2bc/vtt3P48OEz3qe0oXrp6enceuut1KtXDy8vL4YMGcKuXbtOOXfPnj2MGzeOFi1a4OHhQePGjRk+fDibN2+2H7N48WK6desGwLhx4+xDQouH/JX2/WK1Wnn99ddp3bo1rq6uNGjQgDFjxrB///4SxxV/v65evZq+ffvi4eFB06ZNefXVV7FarWd87+WRk5PD448/TkREBC4uLjRu3Ji7776b1NTUEsctXLiQAQMGUK9ePdzd3QkNDeWqq64iKyvLfsyUKVPo2LEjXl5eeHt707p1a5544olqiVNEpCyqOImI1IDExERuuukmHnnkEV5++WXMZuPvVLt37+bSSy9l4sSJeHp6smPHDl577TVWrVp1ynC/0mzcuJEHH3yQxx57jIYNG/LZZ58xfvx4mjdvTr9+/co8Nz8/n8svv5zx48fz4IMP8s8///DCCy/g6+vLM888A0BmZiYDBw4kJSWF1157jebNm/P3339z3XXXlet9p6SkAPDss8/SqFEjjh07xs8//8yAAQNYsGABAwYMKHH8hx9+SOvWrZk0aRJgDHm79NJLiY6OxtfXFzCSpnHjxjFixAjeeust0tLSeO6558jNzbV/Xk/HbDYzduxYXnzxRTZu3EjHjh3trxUnU8VJ7d69e+nVqxcTJkzA19eXmJgY3n77bS644AI2b96Ms7NzuT4HADabjZEjR7Js2TKeeeYZunXrxn///cfQoUNPOTYhIYF69erx6quvEhgYSEpKCl988QU9evRg/fr1tGrVii5dujBt2jTGjRvHU089Za+QlVVluvPOO/nkk0+45557GDZsGDExMTz99NMsXryYdevWUb9+ffuxSUlJjBo1igcffJBnn32Wn3/+mccff5zg4GDGjBlT7vdd1udiwYIFPP744/Tt25dNmzbx7LPPsnz5cpYvX46rqysxMTFcdtll9O3bl6lTp+Ln58eBAwf4+++/ycvLw8PDg++++4677rqLe++9lzfffBOz2cyePXvYtm1blWIUESkXm4iIVNrNN99s8/T0LLGvf//+NsC2YMGCMs+1Wq22/Px825IlS2yAbePGjfbXnn32WdvJ/0WHhYXZ3NzcbLGxsfZ92dnZtoCAANvtt99u37do0SIbYFu0aFGJOAHb999/X+Kal156qa1Vq1b2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UhKvvPIKvr6+JSpXIiI1QYmTiEgtqVevHn/++ScPPvggN910E56enowYMYKZM2fSpUsXR4cHGH/FX7hwIRMnTuSRRx7BZDIxePBgJk+ezKWXXnrGoWNPPvkkWVlZfP7557z++utERkby0Ucf8fPPP5dYV6oixo8fD8Brr73GlVdeSXh4OE888QRLliyp0DU7d+5M586dWb9+fYlqE4CzszO///47//vf/7j99ttxcnJi0KBBzJ8/v0QzjvIym8389ttvPPDAA7z++uvk5eXRp08f/vrrL1q3bl3i2HfffRdnZ2deeeUVjh07RpcuXfjpp5946qmnShzn4eHB1KlT+b//+z8GDx5Mfn4+zz77rH0tp5NNmTKFZs2a8fnnn/Phhx/i6+vLkCFDeOWVV0qd01QVa9eu5Zprrjll/80338z06dP55ZdfeO6555g2bRovvfQS9evXZ/To0bz88sv2SlqnTp2YO3cuzz77LElJSXh5edGuXTt+++03Bg8eDBhD+aZPn87333/P0aNHqV+/PhdccAFffvnlKXOoRESqm8l24tgHERGRUrz88ss89dRTxMXFlbl2kIiIyLlKFScRESnhgw8+AIzha/n5+SxcuJD33nuPm266SUmTiIict5Q4iYhICR4eHrzzzjvExMSQm5tLaGgojz766ClDx0RERM4nGqonIiIiIiJyBmpHLiIiIiIicgZKnERERERERM5AiZOIiIiIiMgZnHfNIaxWKwkJCXh7e9tXihcRERERkfOPzWYjIyOD4ODgMy7yft4lTgkJCYSEhDg6DBERERERqSPi4+PPuOTGeZc4eXt7A8Ynx8fHx8HRiIiIiIiIo6SnpxMSEmLPEcpy3iVOxcPzfHx8lDiJiIiIiEi5pvCoOYSIiIiIiMgZKHESERERERE5AyVOIiIiIiIiZ3DezXESERERkbrHZrNRUFBAYWGho0ORc4yzszMWi6XK11HiJCIiIiIOlZeXR2JiIllZWY4ORc5BJpOJJk2a4OXlVaXrKHESEREREYexWq1ER0djsVgIDg7GxcWlXB3ORMrDZrNx6NAh9u/fT4sWLapUeVLiJCIiIiIOk5eXh9VqJSQkBA8PD0eHI+egwMBAYmJiyM/Pr1LipOYQIiIiIuJwZrN+LZWaUV0VTH2HioiIiIiInIESJxERERERkTNQ4iQiIiIiUgcMGDCAiRMnlvv4mJgYTCYTGzZsqLGY5DglTiIiIiIiFWAymcrcxo4dW6nr/vTTT7zwwgvlPj4kJITExETatWtXqfuVlxI0g7rqiYiIiIhUQGJiov3xzJkzeeaZZ9i5c6d9n7u7e4nj8/PzcXZ2PuN1AwICKhSHxWKhUaNGFTpHKk8VJxERERGpU2w2G1l5BbW+2Wy2csXXqFEj++br64vJZLI/z8nJwc/Pj++//54BAwbg5ubG119/zZEjR7jhhhto0qQJHh4etG/fnm+//bbEdU8eqhceHs7LL7/MLbfcgre3N6GhoXzyySf210+uBC1evBiTycSCBQuIiorCw8OD3r17l0jqAF588UUaNGiAt7c3EyZM4LHHHqNTp06V+loB5Obmct9999GgQQPc3Ny44IILWL16tf31o0ePMmrUKAIDA3F3d6dFixZMmzYNMNrR33PPPQQFBeHm5kZ4eDivvPJKpWOpSao4iYiIiEidkp1fSOQzc2r9vtuevwQPl+r59fjRRx/lrbfeYtq0abi6upKTk0PXrl159NFH8fHx4c8//2T06NE0bdqUHj16nPY6b731Fi+88AJPPPEEP/74I3feeSf9+vWjdevWpz3nySef5K233iIwMJA77riDW265hf/++w+AGTNm8NJLLzF58mT69OnDd999x1tvvUVERESl3+sjjzzCrFmz+OKLLwgLC+P111/nkksuYc+ePQQEBPD000+zbds2Zs+eTf369dmzZw/Z2dkAvPfee/z22298//33hIaGEh8fT3x8fKVjqUlKnEREREREqtnEiRO58sorS+x76KGH7I/vvfde/v77b3744YcyE6dLL72Uu+66CzCSsXfeeYfFixeXmTi99NJL9O/fH4DHHnuMyy67jJycHNzc3Hj//fcZP34848aNA+CZZ55h7ty5HDt2rFLvMzMzkylTpjB9+nSGDh0KwKeffsq8efP4/PPPefjhh4mLi6Nz585ERUUBRiWtWFxcHC1atOCCCy7AZDIRFhZWqThqgxInqbCktByy8wuJqO/p6FBERETkHOTubGHb85c45L7VpThJKFZYWMirr77KzJkzOXDgALm5ueTm5uLpWfbvUx06dLA/Lh4SmJycXO5zgoKCAEhOTiY0NJSdO3faE7Fi3bt3Z+HCheV6Xyfbu3cv+fn59OnTx77P2dmZ7t27s337dgDuvPNO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vA7s0/XYWa97GJyIiIiIiFxoliM4VcJiER2P7zpjHW0alxgMrUouSW2Xu9RZjw0iuoPBiYiIiIjIhbJSwhCoVqC62YC8y0Zz9tjWN02WeH2T3WjbVL3i2hbU6o0SV+P9GJyIiIiIiFxIpZBh+rAIAJc2w7VYvGt9EwDotEqkhPsD4H5O3cHgRERERETkYvbpevbgdLKiCXUt7fBTyR1ri7xBum3UidP1nGNwIiIiIiJyseuGRUIhE3CmshmF1XrHaNPElFAo5d7zFXyMbZ0TO+s55z1XjYiIiIion9BplcgaZO2ct/XERcf+TZMHe8f6JrtLnfUaIIritV88wDE4ERERERG5wcwR1ul6Xx4rx75z1uCU7SXrm+xGxQZBIRNQ3WxAeUOb1OV4NQYnIiIiIiI3sK9zOlRcD73RjGA/JUbGBElcVUcapRxDowIBcLqeMwxORERERERuEB/ihxGXBaXsQWGQyQQJK+rc5dP1qGsMTkREREREbjJrRKTjzzlesn/TlS511quXthAvx+BEREREROQms0ZGO/7sLfs3XcneWS+/tAEWCxtEdEUhdQFERERERP1VWlwQ7spKhFwmYJBts1lvMzQqABqlDE0GE85V6zEkMkDqkrwSgxMRERERkZsIgoD/uW201GVck0IuQ1qsDgfP1+FoaT2DUxc4VY+IiIiIaIDjRrjOMTgREREREQ1w6QnWBhHsrNc1BiciIiIiogEu3TbidKK8EUaTRdpivBSDExERERHRAJcU5gedVgmjyYJTFU1Sl+OVGJyIiIiIiAY4QRAwJt4+Xa9e2mK8FIMTERERERE5putxI9zOMTgREREREdGlEacSNojoDIMTERERERFhbEIwAOB0ZRNajCZpi/FCDE5ERERERITIIA2igzSwiMCxskapy/E6DE5ERERERATg8ul69dIW4oUYnIiIiIiICACQbpuux856V2NwIiIiIiIiAJd31mODiCsxOBEREREREQBgtG2qXnFtC2r1Romr8S4MTkREREREBADQaZUYFO4PgPs5XYnBiYiIiIiIHOwNIjhdryMGJyIiIiIichhjW+fEznodMTgREREREZHDpc56DRBFUdpivAiDExEREREROYyKDYJCJqC62YDyhjapy/EaDE5EREREROSgUcoxNCoQALC/sFbiarwHgxMREREREXUwMSUUAPDf/z6KV7adgclskbgi6TE4ERERERFRBytmpmLG8EgYzRb8efMp3PHPPThb1Sx1WZJicCIiIiIiog6C/VR4dUkm/nLHGASqFcgrqceNL+/AqzvOwWwZmA0jGJyIiIiIiOgqgiDgJ5kJ+OrX0zA1NRwGkwV//KIAP1u7B0XVeqnL8zgGJyIiIiIi6lJssBbr752I1fNHw18lx4GiOsx5+Xu8uasQlgE0+sTgRERERERE1yQIAu6cmIjNK6Yhe1AY2totWPWfE1j46l6U1LZIXZ5HMDgREREREVG3JIT6YcP9WXj21lHQKuXYe64Wc176Hhv2ne/3m+UyOBERERERUbfJZAIWZydj84qpmJgcCr3RjCc3HsPi1/fjQn2r1OW5DYMTERERERH1WFKYP95/cBKevmkk1AoZdpyuxo9e/B7/OlDSL0efGJyIiIiIiKhXZDIB901JwaZfTcW4xGA0GUz474+O4t43D+BiY5vU5bkUgxMREREREfXJ4IgA/HtpDh6fOxwquQzfnarCrBe2Y+Ph0n4z+iR5cHrllVeQkpICjUaDjIwM7Nixo8vX7ty5E5MnT0ZYWBi0Wi2GDx+OF1980YPVEhERERFRZ+QyAUunD8YXv5yCMfE6NLaZ8OsPjuCht3NR1WSQurw+kzQ4ffDBB1ixYgWefPJJHD58GFOnTsXcuXNRXFzc6ev9/f2xfPlyfP/99ygoKMBTTz2Fp556CmvXrvVw5URERERE1JnUqEB8/IscPDZ7KJRyAV+fuIjZL27H50cvSF1anwiihGNnWVlZGD9+PNasWeN4bMSIEZg3bx5Wr17drWPMnz8f/v7+ePvtt7v1+sbGRuh0OjQ0NCAoKKhXdRMRERERkXMF5Y34zb+O4ER5IwDgx6Nj8Id5aQj1V0lcmVVPsoFkI05GoxG5ubmYPXt2h8dnz56N3bt3d+sYhw8fxu7duzF9+vQuX2MwGNDY2Njhh4iIiIiI3G9ETBA+WTYZv5qRCoVMwBf55Zj94nZsPlYhdWk9Jllwqq6uhtlsRlRUVIfHo6KiUFFx7X/I+Ph4qNVqZGZmYtmyZbj//vu7fO3q1auh0+kcPwkJCS6pn4iIiIiInFMpZPj1rKH4ZNlkDIsKRHWzEUvfycW/c0ulLq1HJG8OIQhCh/8WRfGqx660Y8cOHDx4EP/85z/x0ksv4b333uvytU888QQaGhocPyUlJS6pm4iIiIiIui8tTofPHpmMh68bjEHh/pibFi11ST2ikOrE4eHhkMvlV40uVVZWXjUKdaWUlBQAwOjRo3Hx4kWsWrUKd955Z6evVavVUKvVrimaiIiIiIh6Ta2Q47/nDMcvZ6RCo5RLXU6PSDbipFKpkJGRgS1btnR4fMuWLcjJyen2cURRhMHg++0NiYiIiIgGCl8LTYCEI04A8Oijj2LRokXIzMxEdnY21q5di+LiYixduhSAdZpdWVkZ1q9fDwD4xz/+gcTERAwfPhyAdV+n559/Ho888ohkfwciIiIiIur/JA1OCxYsQE1NDZ599lmUl5cjLS0NmzZtQlJSEgCgvLy8w55OFosFTzzxBAoLC6FQKDB48GA899xzeOihh6T6KxARERER0QAg6T5OUuA+TkREREREBPjIPk5ERERERES+gsGJiIiIiIjICQYnIiIiIiIiJxiciIiIiIiInGBwIiIiIiIicoLBiYiIiIiIyAkGJyIiIiIiIicYnIiIiIiIiJxgcCIiIiIiInKCwYmIiIiIiMgJBiciIiIiIiInGJyIiIiIiIicYHAiIiIiIiJygsGJiIiIiIjICYXUBXiaKIoAgMbGRokrISIiIiIiKdkzgT0jXMuAC05NTU0AgISEBIkrISIiIiIib9DU1ASdTnfN1whid+JVP2KxWHDhwgUEBgZCEIRuvaexsREJCQkoKSlBUFCQmyskd+F19H28hv0Dr6Pv4zXsH3gd+wdex74RRRFNTU2IjY2FTHbtVUwDbsRJJpMhPj6+V+8NCgriB7If4HX0fbyG/QOvo+/jNewfeB37B17H3nM20mTH5hBEREREREROMDgRERERERE5weDUDWq1GitXroRarZa6FOoDXkffx2vYP/A6+j5ew/6B17F/4HX0nAHXHIKIiIiIiKinOOJERERERETkBIMTERERERGREwxORERERERETjA4EREREREROcHg5MQrr7yClJQUaDQaZGRkYMeOHVKXRD2watUqCILQ4Sc6OlrqssiJ77//HjfffDNiY2MhCAI++eSTDs+LoohVq1YhNjYWWq0W1113HY4fPy5NsdQpZ9fwnnvuuerenDRpkjTFUpdWr16NCRMmIDAwEJGRkZg3bx5OnTrV4TW8H71bd64h70fvt2bNGowZM8axyW12dja+/PJLx/O8Dz2DwekaPvjgA6xYsQJPPvkkDh8+jKlTp2Lu3LkoLi6WujTqgVGjRqG8vNzxk5+fL3VJ5IRer0d6ejr+/ve/d/r8n//8Z7zwwgv4+9//jgMHDiA6OhqzZs1CU1OThyulrji7hgAwZ86cDvfmpk2bPFghdcf27duxbNky7N27F1u2bIHJZMLs2bOh1+sdr+H96N26cw0B3o/eLj4+Hs899xwOHjyIgwcP4oYbbsCtt97qCEe8Dz1EpC5NnDhRXLp0aYfHhg8fLj7++OMSVUQ9tXLlSjE9PV3qMqgPAIgbN250/LfFYhGjo6PF5557zvFYW1ubqNPpxH/+858SVEjOXHkNRVEUlyxZIt56662S1EO9V1lZKQIQt2/fLooi70dfdOU1FEXej74qJCREfPXVV3kfehBHnLpgNBqRm5uL2bNnd3h89uzZ2L17t0RVUW+cPn0asbGxSElJwc9+9jOcO3dO6pKoDwoLC1FRUdHh3lSr1Zg+fTrvTR+zbds2REZGYujQoXjggQdQWVkpdUnkRENDAwAgNDQUAO9HX3TlNbTj/eg7zGYz3n//fej1emRnZ/M+9CAGpy5UV1fDbDYjKiqqw+NRUVGoqKiQqCrqqaysLKxfvx5fffUV1q1bh4qKCuTk5KCmpkbq0qiX7Pcf703fNnfuXGzYsAHffvst/vrXv+LAgQO44YYbYDAYpC6NuiCKIh599FFMmTIFaWlpAHg/+prOriHA+9FX5OfnIyAgAGq1GkuXLsXGjRsxcuRI3ocepJC6AG8nCEKH/xZF8arHyHvNnTvX8efRo0cjOzsbgwcPxltvvYVHH31Uwsqor3hv+rYFCxY4/pyWlobMzEwkJSXhiy++wPz58yWsjLqyfPlyHD16FDt37rzqOd6PvqGra8j70TcMGzYMeXl5qK+vx0cffYQlS5Zg+/btjud5H7ofR5y6EB4eDrlcflVSr6ysvCrRk+/w9/fH6NGjcfr0aalLoV6yd0Xkvdm/xMTEICkpifeml3rkkUfw2Wef4bvvvkN8fLzjcd6PvqOra9gZ3o/eSaVSYciQIcjMzMTq1auRnp6Ol19+mfehBzE4dUGlUiEjIwNbtmzp8PiWLVuQk5MjUVXUVwaDAQUFBYiJiZG6FOqllJQUREdHd7g3jUYjtm/fznvTh9XU1KCkpIT3ppcRRRHLly/Hxx9/jG+//RYpKSkdnuf96P2cXcPO8H70DaIowmAw8D70IE7Vu4ZHH30UixYtQmZmJrKzs7F27VoUFxdj6dKlUpdG3fTYY4/h5ptvRmJiIiorK/HHP/4RjY2NWLJkidSl0TU0NzfjzJkzjv8uLCxEXl4eQkNDkZiYiBUrVuBPf/oTUlNTkZqaij/96U/w8/PDwoULJayaLnetaxgaGopVq1bh9ttvR0xMDIqKivC73/0O4eHhuO222ySsmq60bNkyvPvuu/j0008RGBjo+I22TqeDVquFIAi8H72cs2vY3NzM+9EH/O53v8PcuXORkJCApqYmvP/++9i2bRs2b97M+9CTJOvn5yP+8Y9/iElJSaJKpRLHjx/foX0neb8FCxaIMTExolKpFGNjY8X58+eLx48fl7oscuK7774TAVz1s2TJElEUrS2QV65cKUZHR4tqtVqcNm2amJ+fL23R1MG1rmFLS4s4e/ZsMSIiQlQqlWJiYqK4ZMkSsbi4WOqy6QqdXUMA4htvvOF4De9H7+bsGvJ+9A333nuv4/toRESEOGPGDPHrr792PM/70DMEURRFTwY1IiIiIiIiX8M1TkRERERERE4wOBERERERETnB4EREREREROQEgxMREREREZETDE5EREREREROMDgRERERERE5weBERERERETkBIMTERERERGREwxORERE1yAIAj755BOpyyAiIokxOBERkde65557IAjCVT9z5syRujQiIhpgFFIXQEREdC1z5szBG2+80eExtVotUTVERDRQccSJiIi8mlqtRnR0dIefkJAQANZpdGvWrMHcuXOh1WqRkpKCDz/8sMP78/PzccMNN0Cr1SIsLAwPPvggmpubO7zm9ddfx6hRo6BWqxETE4Ply5d3eL66uhq33XYb/Pz8kJqais8++8zxXF1dHe666y5ERERAq9UiNTX1qqBHRES+j8GJiIh82tNPP43bb78dR44cwd13340777wTBQUFAICWlhbMmTMHISEhOHDgAD788ENs3bq1QzBas2YNli1bhgcffBD5+fn47LPPMGTIkA7neOaZZ/DTn/4UR48exY033oi77roLtbW1jvOfOHECX375JQoKCrBmzRqEh4d77h+AiIg8QhBFUZS6CCIios7cc889eOedd6DRaDo8/tvf/hZPP/00BEHA0qVLsWbNGsdzkyZNwvjx4/HKK69g3bp1+O1vf4uSkhL4+/sDADZt2oSbb74ZFy5cQFRUFOLi4vDzn/8cf/zjHzutQRAEPPXUU/jDH/4AANDr9QgMDMSmTZswZ84c3HLLLQgPD8frr7/upn8FIiLyBlzjREREXu3666/vEIwAIDQ01PHn7OzsDs9lZ2cjLy8PAFBQUID09HRHaAKAyZMnw2Kx4NSpUxAEARcuXMCMGTOuWcOYMWMcf/b390dgYCAqKysBAL/4xS9w++2349ChQ5g9ezbmzZuHnJycXv1diYjIezE4ERGRV/P3979q6pwzgiAAAERRdPy5s9dotdpuHU+pVF71XovFAgCYO3cuzp8/jy+++AJbt27FjBkzsGzZMjz//PM9qpmIiLwb1zgREZFP27t371X/PXz4cADAyJEjkZeXB71e73h+165dkMlkGDp0KAIDA5GcnIxvvvmmTzVEREQ4phW+9NJLWLt2bZ+OR0RE3ocjTkRE5NUMBgMqKio6PKZQKBwNGD788ENkZmZiypQp2LBhA/bv34/XXnsNAHDXXXdh5cqVWLJkCVatWoWqqio88sgjWLRoEaKiogAAq1atwtKlSxEZGYm5c+eiqakJu3btwiOPPNKt+n7/+98jIyMDo0aNgsFgwOeff44RI0a48F+AiIi8AYMTERF5tc2bNyMmJqbDY8OGDcPJkycBWDvevf/++3j44YcRHR2NDRs2YOTIkQAAPz8/fPXVV/jVr36FCRMmwM/PD7fffjteeOEFx7GWLFmCtrY2vPjii3jssccQHh6OO+64o9v1qVQqPPHEEygqKoJWq8XUqVPx/vvvu+BvTkRE3oRd9YiIyGcJgoCNGzdi3rx5UpdCRET9HNc4EREREREROcHgRERERERE5ATXOBERkc/ibHMiIvIUjjgRERERERE5weBERERERETkBIMTERERERGREwxORERERERETjA4EREREREROcHgRERERERE5ASDExERERERkRMMTkRERERERE78f5xjGMlkI+axAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "#plots training and validation loss over epochs.\n",
    "epochs = range(1, len(training_losses) + 1)\n",
    "\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(epochs, training_losses, label='Training Loss')\n",
    "plt.plot(epochs, validation_losses, label='Validation Loss')\n",
    "plt.title('Training and Validation Loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4061f064-d883-4ef7-9bc1-f0b77c660947",
   "metadata": {},
   "source": [
    "Calculate models evaluation. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "id": "578f3280-6ae7-4192-80f1-8b246a381ca4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from sklearn.metrics import recall_score, precision_score, f1_score, roc_auc_score\n",
    "from torch.nn.functional import sigmoid\n",
    "\n",
    "# Set the model to evaluation mode\n",
    "model.eval()\n",
    "\n",
    "# Containers for true labels and predictions\n",
    "true_labels = []\n",
    "predictions = []\n",
    "\n",
    "# No gradient is needed for evaluation\n",
    "with torch.no_grad():\n",
    "    for inputs, labels in test_loader:\n",
    "        inputs = inputs.to(device)\n",
    "        labels = labels.to(device)\n",
    "        \n",
    "        # Forward pass\n",
    "        outputs = model(inputs)\n",
    "        \n",
    "        # Convert logits to probabilities\n",
    "        probs = sigmoid(outputs)\n",
    "        \n",
    "        # Store predictions and true labels\n",
    "        predictions.append(probs.cpu().numpy())\n",
    "        true_labels.append(labels.cpu().numpy())\n",
    "\n",
    "# Concatenate all batches\n",
    "true_labels = np.vstack(true_labels)\n",
    "predictions = np.vstack(predictions)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "id": "64de3c1f-bd4e-49ed-a4b1-84c1941d8158",
   "metadata": {},
   "outputs": [],
   "source": [
    "binary_predictions = (predictions > 0.3).astype(int)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "02c61f22-8c52-4d29-8237-eaa1cc056b4e",
   "metadata": {},
   "source": [
    "Calculate error metrics for each label separetly"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "id": "ae546c1b-2638-431a-b0cf-48f6b4c0ebee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Label: CD\n",
      "Recall: 0.7691\n",
      "Precision: 0.5535\n",
      "F1-Score: 0.6437\n",
      "ROC AUC: 0.8763\n",
      "Average Precision: 0.7706\n",
      "\n",
      "Label: HYP\n",
      "Recall: 0.7529\n",
      "Precision: 0.3830\n",
      "F1-Score: 0.5077\n",
      "ROC AUC: 0.8675\n",
      "Average Precision: 0.6045\n",
      "\n",
      "Label: MI\n",
      "Recall: 0.8228\n",
      "Precision: 0.5963\n",
      "F1-Score: 0.6915\n",
      "ROC AUC: 0.8922\n",
      "Average Precision: 0.7496\n",
      "\n",
      "Label: NORM\n",
      "Recall: 0.9450\n",
      "Precision: 0.7437\n",
      "F1-Score: 0.8323\n",
      "ROC AUC: 0.9288\n",
      "Average Precision: 0.9013\n",
      "\n",
      "Label: STTC\n",
      "Recall: 0.8356\n",
      "Precision: 0.5796\n",
      "F1-Score: 0.6844\n",
      "ROC AUC: 0.9079\n",
      "Average Precision: 0.7597\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import recall_score, precision_score, f1_score, roc_auc_score, average_precision_score\n",
    "\n",
    "# Initialize scores dictionary\n",
    "scores = {}\n",
    "\n",
    "# Calculate scores for each label, adjusting the precision_score call\n",
    "for i, label in enumerate(mlb.classes_):\n",
    "    scores[label] = {\n",
    "        'Recall': recall_score(true_labels[:, i], binary_predictions[:, i]),\n",
    "        'Precision': precision_score(true_labels[:, i], binary_predictions[:, i], zero_division=0),  # Adjusted here\n",
    "        'F1-Score': f1_score(true_labels[:, i], binary_predictions[:, i]),\n",
    "        'ROC AUC': roc_auc_score(true_labels[:, i], predictions[:, i]),\n",
    "        'Average Precision': average_precision_score(true_labels[:, i], predictions[:, i])\n",
    "    }\n",
    "\n",
    "# Print scores for each label\n",
    "for label, metrics in scores.items():\n",
    "    print(f\"Label: {label}\")\n",
    "    for metric, score in metrics.items():\n",
    "        print(f\"{metric}: {score:.4f}\")\n",
    "    print()  # Newline for better readability\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4815e40d-52b9-4f4d-8a0e-48ecda2cf512",
   "metadata": {},
   "source": [
    "Evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "id": "1785cac0-e97f-41c2-a559-8741add686eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate(model, data_loader, criterion, device):\n",
    "    model.eval()\n",
    "    total_loss = 0\n",
    "    predictions = []\n",
    "    actuals = []\n",
    "\n",
    "    with torch.no_grad():\n",
    "        for inputs, labels in data_loader:\n",
    "            inputs, labels = inputs.to(device), labels.to(device)\n",
    "            outputs = model(inputs)\n",
    "            loss = criterion(outputs, labels)\n",
    "            total_loss += loss.item()\n",
    "            probabilities = torch.sigmoid(outputs)\n",
    "            predicted = probabilities > 0.5\n",
    "            predictions.append(predicted.cpu().numpy())\n",
    "            actuals.append(labels.cpu().numpy())\n",
    "\n",
    "    avg_loss = total_loss / len(data_loader)\n",
    "    predictions = np.vstack(predictions)\n",
    "    actuals = np.vstack(actuals)\n",
    "    return avg_loss, predictions, actuals\n",
    "\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "test_loss, test_predictions, test_actuals = evaluate(model, test_loader, criterion, device)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3621bb77-a021-4d90-8085-c1402e5924d8",
   "metadata": {},
   "source": [
    "Calculate confusion matrix for each label (I had difficulties using the normal SNS confusion matrix) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "id": "a9090f67-477f-43c4-80d4-13e49c5bb343",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CD metrics:\n",
      "Accuracy: 0.8576, Precision: 0.6971, Recall: 0.6747, F1: 0.6857, AUC-ROC: 0.7935\n",
      "\n",
      "          Predicted\n",
      "          0      1\n",
      "Actual 0  1519    146\n",
      "       1  162    336\n",
      "\n",
      "HYP metrics:\n",
      "Accuracy: 0.8849, Precision: 0.5226, Recall: 0.6160, F1: 0.5654, AUC-ROC: 0.7690\n",
      "\n",
      "          Predicted\n",
      "          0      1\n",
      "Actual 0  1752    148\n",
      "       1  101    162\n",
      "\n",
      "MI metrics:\n",
      "Accuracy: 0.8308, Precision: 0.6604, Recall: 0.6962, F1: 0.6778, AUC-ROC: 0.7866\n",
      "\n",
      "          Predicted\n",
      "          0      1\n",
      "Actual 0  1412    198\n",
      "       1  168    385\n",
      "\n",
      "NORM metrics:\n",
      "Accuracy: 0.8474, Precision: 0.7871, Recall: 0.9015, F1: 0.8404, AUC-ROC: 0.8527\n",
      "\n",
      "          Predicted\n",
      "          0      1\n",
      "Actual 0  964    235\n",
      "       1  95    869\n",
      "\n",
      "STTC metrics:\n",
      "Accuracy: 0.8433, Precision: 0.6538, Recall: 0.7476, F1: 0.6976, AUC-ROC: 0.8107\n",
      "\n",
      "          Predicted\n",
      "          0      1\n",
      "Actual 0  1433    207\n",
      "       1  132    391\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import recall_score, precision_score, f1_score, roc_auc_score, average_precision_score, accuracy_score, hamming_loss, roc_curve\n",
    "\n",
    "#true_labels = np.vstack(true_labels)\n",
    "#predictions = np.vstack(predictions)\n",
    "\n",
    "label_names = mlb.classes_ \n",
    "for i, label in enumerate(label_names):\n",
    "    y_true = test_actuals.astype(int)[:, i]\n",
    "    y_pred = test_predictions.astype(int)[:, i]\n",
    "\n",
    "    acc = accuracy_score(y_true, y_pred)\n",
    "    precision = precision_score(y_true, y_pred, average='binary')\n",
    "    recall = recall_score(y_true, y_pred, average='binary')\n",
    "    f1 = f1_score(y_true, y_pred, average='binary')\n",
    "    auc_roc = roc_auc_score(y_true, y_pred)\n",
    "    cm = confusion_matrix(y_true, y_pred)\n",
    "\n",
    "    print(f\"{label} metrics:\")\n",
    "    print(f\"Accuracy: {acc:.4f}, Precision: {precision:.4f}, Recall: {recall:.4f}, F1: {f1:.4f}, AUC-ROC: {auc_roc:.4f}\")\n",
    "    print(\"\\n          Predicted\")\n",
    "    print(\"          0      1\")\n",
    "    print(f\"Actual 0  {cm[0,0]}    {cm[0,1]}\")\n",
    "    print(f\"       1  {cm[1,0]}    {cm[1,1]}\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d611c91-685f-41e4-8557-0ebf9c137316",
   "metadata": {},
   "source": [
    "Display overall error score for the model (all labels combined)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "id": "aec976eb-8451-4e11-9ebe-617030a42d17",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.5501618122977346\n",
      "Precision (Micro): 0.696457588560286\n",
      "Recall (Micro): 0.7650838986076401\n",
      "F1 Score (Micro): 0.7291595780877851\n",
      "Hamming Loss: 0.14720295885344428\n",
      "Auc Roc: 0.8242689270926895\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, hamming_loss, auc, roc_curve, roc_auc_score, confusion_matrix\n",
    "\n",
    "accuracy = accuracy_score(test_actuals, test_predictions)\n",
    "precision_micro = precision_score(test_actuals, test_predictions, average='micro')\n",
    "recall_micro = recall_score(test_actuals, test_predictions, average='micro')\n",
    "f1_micro = f1_score(test_actuals, test_predictions, average='micro')\n",
    "hamming = hamming_loss(test_actuals, test_predictions)\n",
    "\n",
    "fpr, tpr,_  = roc_curve(test_actuals.ravel(), test_predictions.ravel()) \n",
    "auc_roc = auc(fpr, tpr) \n",
    "\n",
    "print(f\"Accuracy: {accuracy}\")\n",
    "print(f\"Precision (Micro): {precision_micro}\")\n",
    "print(f\"Recall (Micro): {recall_micro}\")\n",
    "print(f\"F1 Score (Micro): {f1_micro}\")\n",
    "print(f\"Hamming Loss: {hamming}\")\n",
    "print(f\"Auc Roc: {auc_roc}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "829017ab-1202-4101-83de-529ce1f515d5",
   "metadata": {},
   "source": [
    "Precision-recall curve for all labels separetly"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "id": "aac9560f-332e-4bc4-b150-74978c5091ba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhgAAAGHCAYAAADyXCsbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABcw0lEQVR4nO3deVhU5dsH8O8wM8ywI/sqICiiKAooihmumJpLVpqaW1qpZalZr2a5K2Xqrywxd9PULLfKndLcV8QlcQUUEBBBWRRkmTnvH8ToyCLgwGH5fq5rLuc885xz7jkgc89znkUiCIIAIiIiIh3SEzsAIiIiqn2YYBAREZHOMcEgIiIinWOCQURERDrHBIOIiIh0jgkGERER6RwTDCIiItI5JhhERESkc0wwiIiISOeYYFCVWbt2LSQSieYhk8ng5OSEESNG4M6dO1Uez/Dhw+Hq6lqufW7dugWJRIK1a9dWSkzPM3z4cK1rqK+vD3d3d0yaNAkZGRmixPS04q5P4c/91q1bZTrGxYsXMWLECLi5uUGpVMLY2Bi+vr6YP38+7t+/XzmBV7Jbt26hZ8+esLCwgEQiwfjx4yv1fK6urnj11Vd1cqwZM2ZAIpEgJSVFJ8d7+pjPs23bNgwcOBAeHh4wMDCAq6srBg8ejBs3bugsFqo8MrEDoLpnzZo1aNy4MbKzs3H48GGEhITg0KFDuHTpEoyMjKosji+//BIff/xxufaxt7fHiRMn4O7uXklRPZ+BgQEOHDgAAEhLS8OWLVuwcOFCXLx4Efv37xctLl1YsWIFxo4dC09PT3z66ado0qQJ8vLycPbsWfz44484ceIEtm/fLnaY5TZhwgScOnUKq1evhp2dHezt7cUOqUb4+uuvYWdnh6lTp6JBgwaIi4vDvHnz4Ovri5MnT6Jp06Zih0ilYIJBVc7b2xv+/v4AgI4dO0KlUmH27NnYsWMHBg8eXOw+WVlZMDQ01GkcFUkSFAoF2rRpo9M4yktPT08rhldeeQXR0dEICwtDTEwM3NzcRIyu4k6cOIExY8aga9eu2LFjBxQKhea1rl274pNPPsHevXt1cq7s7GwolcoyfYvWhX///RetW7dG3759dXI8lUqF/Px8rWtUG/3555+wsbHRKuvUqRNcXV3xv//9DytXrhQpMioL3iIh0RV+WN6+fRtAwW0AY2NjXLp0CcHBwTAxMUHnzp0BALm5uZgzZw4aN24MhUIBa2trjBgxAvfu3Sty3I0bN6Jt27YwNjaGsbExWrRogVWrVmleL+4WyW+//YaAgACYmZnB0NAQDRo0wDvvvKN5vaRbJEePHkXnzp1hYmICQ0NDBAYGYteuXVp1Cm8VHDx4EGPGjIGVlRUsLS3Rr18/JCQkVPj6AdAkbHfv3tUq37x5M9q2bQsjIyMYGxujW7duiIiIKLL/qVOn0KtXL1haWkKpVMLd3V2rGf/mzZsYMWIEGjZsCENDQzg6OqJXr164dOnSC8X9tHnz5kEikWD58uXFfnDq6+ujd+/emm2JRIIZM2YUqefq6orhw4drtguv+/79+/HOO+/A2toahoaG2Lx5MyQSCf7+++8ix1i6dCkkEgkuXryoKTt79ix69+4NCwsLKJVKtGzZEr/++mup7+mff/6BRCLBzZs3sWfPHs2trcLbRbGxsXj77bdhY2MDhUIBLy8vLFy4EGq1WnOMwt+5+fPnY86cOXBzc4NCocDBgwdLPffzhIWFoU+fPnBycoJSqYSHhwfef//9Em+FxMXFoV+/fjA1NYWZmRnefvvtYv/flfV3riyeTS4AwMHBAU5OToiLi6vQManqMMEg0d28eRMAYG1trSnLzc1F79690alTJ/z++++YOXMm1Go1+vTpg6+++gqDBg3Crl278NVXXyEsLAwdOnRAdna2Zv9p06Zh8ODBcHBwwNq1a7F9+3YMGzZMk8QU58SJExgwYAAaNGiAX375Bbt27cK0adOQn59favyHDh1Cp06dkJ6ejlWrVmHTpk0wMTFBr169sHnz5iL1R40aBblcjo0bN2L+/Pn4559/8Pbbb5f3smmJiYmBTCZDgwYNNGXz5s3DwIED0aRJE/z6669Yv349MjMz0b59e0RGRmrq7du3D+3bt0dsbCwWLVqEPXv24IsvvtBKVhISEmBpaYmvvvoKe/fuxZIlSyCTyRAQEIBr1669UOxAwTfyAwcOwM/PD87Ozi98vOK88847kMvlWL9+PbZs2YLXXnsNNjY2WLNmTZG6a9euha+vL5o3bw4AOHjwINq1a4e0tDT8+OOP+P3339GiRQsMGDCg1P44vr6+OHHiBOzs7NCuXTucOHECJ06cgL29Pe7du4fAwEDs378fs2fPxh9//IEuXbpg0qRJ+PDDD4sca/HixThw4AAWLFiAPXv2oHHjxi90PaKiotC2bVssXboU+/fvx7Rp03Dq1Cm89NJLyMvLK1L/tddeg4eHB7Zs2YIZM2Zgx44d6Natm1bdsv7OvYjo6Gjcvn2bt0dqAoGoiqxZs0YAIJw8eVLIy8sTMjMzhZ07dwrW1taCiYmJkJSUJAiCIAwbNkwAIKxevVpr/02bNgkAhK1bt2qVnzlzRgAghIaGCoIgCNHR0YJUKhUGDx5cajzDhg0TXFxcNNsLFiwQAAhpaWkl7hMTEyMAENasWaMpa9OmjWBjYyNkZmZqyvLz8wVvb2/ByclJUKvVWu9/7NixWsecP3++AEBITEwsNd7CmI2MjIS8vDwhLy9PSElJEZYuXSro6ekJn3/+uaZebGysIJPJhHHjxmntn5mZKdjZ2Qn9+/fXlLm7uwvu7u5Cdnb2c8//9PvLzc0VGjZsKEyYMEFTXtz1KXzfMTExJR4vKSlJACC89dZbZY4BgDB9+vQi5S4uLsKwYcOKnH/o0KFF6k6cOFEwMDDQ+plHRkYKAITvv/9eU9a4cWOhZcuWQl5entb+r776qmBvby+oVKpSY3VxcRF69uypVTZ58mQBgHDq1Cmt8jFjxggSiUS4du2aIAhPrqm7u7uQm5tb6nlKO19p1Gq1kJeXJ9y+fVsAIPz++++a16ZPny4A0Po5C4IgbNiwQQAg/Pzzz4IglO93rvCY5ZWXlyd06NBBMDU1FWJjY8u9P1UttmBQlWvTpg3kcjlMTEzw6quvws7ODnv27IGtra1Wvddff11re+fOnTA3N0evXr2Qn5+vebRo0QJ2dnb4559/ABQ0/apUKnzwwQfliqtVq1YAgP79++PXX38t08iWR48e4dSpU3jjjTdgbGysKZdKpRgyZAji4+OLfMN/upkfgOZbcmHrilqt1np/KpWqyDnlcjnkcjmsrKwwZswYDBgwAHPnztXU2bdvH/Lz8zF06FCtYymVSgQFBWmu1fXr1xEVFYWRI0dCqVSW+D7z8/Mxb948NGnSBPr6+pDJZNDX18eNGzdw5cqV516n6uDZ3yegoFUjOztbq6VpzZo1UCgUGDRoEICCFrarV69q+gc9fT179OiBxMTECrXiHDhwAE2aNEHr1q21yocPHw5BEDQdeQv17t0bcrm83OcpSXJyMkaPHg1nZ2fIZDLI5XK4uLgAQLE/02f7R/Xv3x8ymUxzq6asv3MVJQgCRo4ciSNHjmDdunWV1tJFusNOnlTl1q1bBy8vL8hkMtja2hbbo97Q0BCmpqZaZXfv3kVaWhr09fWLPW7hvePC+8JOTk7liuvll1/Gjh07sHjxYgwdOhQ5OTlo2rQppk6dioEDBxa7z4MHDyAIQrHvwcHBAQCQmpqqVW5paam1XdjfoPAWz6xZszBz5kzN6y4uLlpDPA0MDHD48GEAQFJSEhYuXIhNmzahefPmmDx5MoAnfTEKk6Zn6ekVfLco67WaOHEilixZgv/7v/9DUFAQ6tWrBz09PYwaNUrr1lRFWVlZwdDQEDExMS98rJIU9zNq2rQpWrVqhTVr1uC9996DSqXCzz//jD59+sDCwgLAk2s5adIkTJo0qdhjV2QIZ2pqarHDpEv6vdHlyBO1Wo3g4GAkJCTgyy+/RLNmzWBkZAS1Wo02bdoU+zO1s7PT2pbJZLC0tNTEWdbfuYoQBAGjRo3Czz//jJ9++gl9+vSp8LGo6jDBoCrn5eWl6ZRYkuJ69xd2iixpJIGJiQmAJ3054uPjy/0tp0+fPujTpw9ycnJw8uRJhISEYNCgQXB1dUXbtm2L1C/8oE1MTCzyWmHHTSsrq3LF8N5772nNYfBsh0c9PT2t69e1a1f4+flh5syZGDx4MJydnTXn3LJli+ZbaXGevlal+fnnnzF06FDMmzdPqzwlJQXm5uZlel+lkUql6Ny5M/bs2YP4+PgyJYcKhQI5OTlFyp/9YC5U0oiRESNGYOzYsbhy5Qqio6ORmJiIESNGaF4vvJZTpkxBv379ij2Gp6fnc+N9lqWlZbl+b3Q54uXff//FhQsXsHbtWgwbNkxTXtgfqjhJSUlwdHTUbOfn5yM1NVWTMJf1d668CpOLNWvWYNWqVS/cX4mqDhMMqjFeffVV/PLLL1CpVAgICCixXnBwMKRSKZYuXVpsUlAWCoUCQUFBMDc3x759+xAREVHssYyMjBAQEIBt27ZhwYIFMDAwAFDwDfHnn3+Gk5MTGjVqVK5zOzg4aL7FljXWJUuWoEOHDpgzZw6WLVuGbt26QSaTISoqqthbA4UaNWoEd3d3rF69GhMnTixx2KNEIiny2q5du3Dnzh14eHiUOdbSTJkyBbt378a7776L33//vUhLVV5eHvbu3YtevXoBKBgt8vQoD6DgtsPDhw/Ldd6BAwdi4sSJWLt2LaKjo+Ho6Ijg4GDN656enmjYsCEuXLhQJMF6EZ07d0ZISAjOnTsHX19fTfm6desgkUjQsWNHnZ3rWYXJyrM/02XLlpW4z4YNG+Dn56fZ/vXXX5Gfn48OHToAQJl/58pDEAS8++67WLNmDZYtW6aV+FH1xwSDaoy33noLGzZsQI8ePfDxxx+jdevWkMvliI+Px8GDB9GnTx+89tprcHV1xeeff47Zs2cjOzsbAwcOhJmZGSIjI5GSkqJ1++Fp06ZNQ3x8PDp37gwnJyekpaXhu+++g1wuR1BQUIlxhYSEoGvXrujYsSMmTZoEfX19hIaG4t9//8WmTZuqZK6FoKAg9OjRA2vWrMHkyZPh5uaGWbNmYerUqYiOjsYrr7yCevXq4e7duzh9+jSMjIw012HJkiXo1asX2rRpgwkTJqB+/fqIjY3Fvn37sGHDBgAFyd3atWvRuHFjNG/eHOHh4fjmm2/KfRuqNIUjGsaOHQs/Pz+MGTMGTZs2RV5eHiIiIrB8+XJ4e3trEowhQ4bgyy+/xLRp0xAUFITIyEj88MMPMDMzK9d5zc3N8dprr2Ht2rVIS0vDpEmTijTnL1u2DN27d0e3bt0wfPhwODo64v79+7hy5QrOnTuH3377rdzvd8KECVi3bh169uyJWbNmwcXFBbt27UJoaCjGjBlT7sT0WUlJSdiyZUuRcldXV/j4+MDd3R2TJ0+GIAiwsLDAn3/+ibCwsBKPt23bNshkMnTt2hWXL1/Gl19+CR8fH/Tv319z3LL+zpXVRx99hFWrVuGdd95Bs2bNcPLkSc1rCoUCLVu2LNfxqIqJ2MGU6pjC3vxnzpwptV7hSIni5OXlCQsWLBB8fHwEpVIpGBsbC40bNxbef/994caNG1p1161bJ7Rq1UpTr2XLllqjG54dRbJz506he/fugqOjo6Cvry/Y2NgIPXr0EI4cOaKpU9woCUEQhCNHjgidOnUSjIyMBAMDA6FNmzbCn3/+Wab3f/DgQQGAcPDgwVKvy/OuzaVLlwQ9PT1hxIgRmrIdO3YIHTt2FExNTQWFQiG4uLgIb7zxhvDXX39p7XvixAmhe/fugpmZmaBQKAR3d3etUQMPHjwQRo4cKdjY2AiGhobCSy+9JBw5ckQICgoSgoKCSr0+ZRlF8rTz588Lw4YNE+rXry/o6+sLRkZGQsuWLYVp06YJycnJmno5OTnCZ599Jjg7OwsGBgZCUFCQcP78+RJHkZT2e7d//34BgABAuH79erF1Lly4IPTv31+wsbER5HK5YGdnJ3Tq1En48ccfn/ueShrVcfv2bWHQoEGCpaWlIJfLBU9PT+Gbb77RGpVSeE2/+eab557n6fMVvp9nH4XXJjIyUujatatgYmIi1KtXT3jzzTeF2NjYIqNzCkd8hIeHC7169RKMjY0FExMTYeDAgcLdu3eLnLssv3NlHUVS2vt4+v8uVU8SQRCEKstmiIiIqE7gMFUiIiLSOSYYREREpHNMMIiIiEjnmGAQERGRzjHBICIiIp1jgkFEREQ6V+cm2lKr1UhISICJiUmVTIBERERUWwiCgMzMTDg4ODx3fZk6l2AkJCRwFT4iIqIXEBcX99yZfOtcglG4IFZcXFyR1TqJiIioZBkZGXB2dtZ8lpamziUYhbdFTE1NmWAQERFVQFm6GLCTJxEREekcEwwiIiLSOSYYREREpHN1rg8GERFVTyqVCnl5eWKHUefJ5XJIpdIXPg4TDCIiEt3Dhw8RHx8PQRDEDqXOk0gkcHJygrGx8QsdhwkGERGJSqVSIT4+HoaGhrC2tuYkiCISBAH37t1DfHw8GjZs+EItGUwwiIhIVHl5eRAEAdbW1jAwMBA7nDrP2toat27dQl5e3gslGKJ28jx8+DB69eoFBwcHSCQS7Nix47n7HDp0CH5+flAqlWjQoAF+/PHHyg+UiIgqHVsuqgdd/RxETTAePXoEHx8f/PDDD2WqHxMTgx49eqB9+/aIiIjA559/jo8++ghbt26t5EiJiIioPES9RdK9e3d07969zPV//PFH1K9fH99++y0AwMvLC2fPnsWCBQvw+uuvV1KUz3fjbiai7j0s1z5NHczgbGFYSRERERGJq0b1wThx4gSCg4O1yrp164ZVq1YhLy8Pcrm8yD45OTnIycnRbGdkZOg8rj8vJmLx3zfKtY+5oRxnpnaBXMqpSIiI6qK1a9di/PjxSEtLe6HjSCQSbN++HX379tVJXLpSoxKMpKQk2NraapXZ2toiPz8fKSkpsLe3L7JPSEgIZs6cWalxOZor4e9Sr0x1VYKAiNg0pGXlITdfzQSDiKiGGj58ONLS0srUf1BMISEh2LZtG65evQoDAwMEBgbi66+/hqenZ6Wet0YlGEDRzieFY6ZL6pQyZcoUTJw4UbNduBKcLg1oVR8DWtUvU93HeSo0/nKvTs9PRERUkkOHDuGDDz5Aq1atkJ+fj6lTpyI4OBiRkZEwMjKqtPPWqK/PdnZ2SEpK0ipLTk6GTCaDpaVlsfsoFArNyqlcQZWIqPoTBAFZufmiPHQ50deiRYvQrFkzGBkZwdnZGWPHjsXDh0X76+3YsQONGjWCUqlE165dERcXp/X6n3/+qTV6cubMmcjPzy9zHHv37sXw4cPRtGlT+Pj4YM2aNYiNjUV4ePgLv8fS1KgWjLZt2+LPP//UKtu/fz/8/f2L7X9BREQ1T3aeCk2m7RPl3JGzusFQXzcfjXp6eli8eDFcXV0RExODsWPH4rPPPkNoaKimTlZWFubOnYuffvoJ+vr6GDt2LN566y0cO3YMALBv3z68/fbbWLx4Mdq3b4+oqCi89957AIDp06dXKK709HQAgIWFxQu+w9KJ2oLx8OFDnD9/HufPnwdQMAz1/PnziI2NBVBwe2Po0KGa+qNHj8bt27cxceJEXLlyBatXr8aqVaswadIkMcInIiIq0fjx49GxY0e4ubmhU6dOmD17Nn799VetOnl5efjhhx/Qtm1b+Pn54aeffsLx48dx+vRpAMDcuXMxefJkDBs2DA0aNEDXrl0xe/ZsLFu2rEIxCYKAiRMn4qWXXoK3t/cLv8fSiNqCcfbsWXTs2FGzXdhXYtiwYVi7di0SExM1yQYAuLm5Yffu3ZgwYQKWLFkCBwcHLF68WNQhqkREpFsGcikiZ3UT7dy6cvDgQcybNw+RkZHIyMhAfn4+Hj9+jEePHmn6PshkMvj7+2v2ady4MczNzXHlyhW0bt0a4eHhOHPmDObOnaupo1Kp8PjxY2RlZcHQsHzTHXz44Ye4ePEijh49qps3WQpRE4wOHTqUer9r7dq1RcqCgoJw7ty5SoyKdCErNx93HmTDyliBekb6YodDRDWIRCLR2W0Ksdy+fRs9evTA6NGjMXv2bFhYWODo0aMYOXJkkRVjixukUFimVqsxc+ZM9OvXr0gdpVJZrpjGjRuHP/74A4cPH4aTk1O59q2Imv0TJNGo1QIS0rMRfe8R4h5kIf5BNuLuZyHuQTbuPMhCysNcAICxQoaTn3eGsYK/akRUd5w9exb5+flYuHAh9PQKeiM8e3sEAPLz83H27Fm0bt0aAHDt2jWkpaWhcePGAABfX19cu3YNHh4eFY5FEASMGzcO27dvxz///AM3N7cKH6s8+FefSqVSC7iV+gg37j5E1L2HuHE3EzfvPURU8iNk56meu//DnHzcy8xhgkFEtVJ6erqmH2EhCwsLuLu7Iz8/H99//z169eqFY8eOFbt2llwux7hx47B48WLI5XJ8+OGHaNOmjSbhmDZtGl599VU4OzvjzTffhJ6eHi5evIhLly5hzpw5ZYrxgw8+wMaNG/H777/DxMREMxrTzMysUheX41990lCpBUTde4hL8em4dCcd/95JR2RiBrJyi08k5FIJXCyNUN/CEM71DOBUzxDOFv/9W88QL319AJk52kOpcvJVeJyrhpkhR/0QUc33zz//oGXLllplhf0IFy1ahK+//hpTpkzByy+/jJCQEK2BCwBgaGiI//u//8OgQYMQHx+Pl156CatXr9a83q1bN+zcuROzZs3C/PnzIZfL0bhxY4waNarMMS5duhRAQbeEp61ZswbDhw8v3xsuB4mgy0G/NUBGRgbMzMyQnp4uypwYT0+0dXlmNxiJ+M0+N1+NS3fScDrmAU7HpOLsrQdFEgKgoNOTh41xkUd9C8NSZyJtNn0fMnPy8YafE+4/ykX0vYeIvZ8FAcDyIf7o2sS2xH2JqO54/PgxYmJi4ObmVu5+BaR7pf08yvMZyhaMOiYhLRsHribj4NVkHI9KLXKbw1BfiqYOpvB2NEOz/x4NrI0h1Sv/8r1SacE+W8Lji7x2OSGdCQYRUS3GBKMOuJn8EH+cv4P9kXdxNSlT6zULI320drVAKzcLBLhZoLGdCWQ6Wh/lk2BPHLhyF65WRmhgbQx3ayNsOh2HPy8k6OT4RERUfTHBqGZORKXi27+uY+RLbghualfh46Q+zMHv5xOw4/wdXIxP15TrSYCW9euhU2MbdPS0gZe9SYnruLyoIW1cMKSNi1bZrouJAID1J27jp+O38N7L7hjTwb1Szk9EROJhglGNrDkWg5l/RgIAjBSyCiUYl+LTsfb4Lfx5IQG5KjUAQKYnwcuNrNHLxx4dGtmIOi+FqUFB587URwXDWPf+m1hpCYZaLeBOWjbupGXD29GMI1mIiKoQ/+JWA4Ig4Jt91xD6T5SmLDdfXa5jnIpOxaKw6zgVc19T1tzJDG/4OaFnM3tYGit0Fu+LGPmSG6yNFYh/kI3Vx2J0cszcfDVupz7CzeSHBY97Bf9G3XuIx3kF1/HV5vb4YZCvTs5HRJWjjo05qLZ09XNgglENLNj/JLlwsTTE7dQsKMs4XW1E7AMs2H8Nx26mAigYOtqzmT2GBbqiZf16lRZzRVkZK/DOS274+8pdrD4Wgwvx6Xh96XGsHtaqTENX07PycDkxHZEJGQWPxAzcTH6IfHXp/yHupGXj/qNcRP2XfDz9yFOpsX5kADztTEo9b1TKQ8Tdz4Jv/Xpwtijf9LxEVDKptODvXW5ubqXOy0Blk5tb0MJc+HOpKCYYIlt34haWHCxILmb3aQq5VA+Tt1167n6pD3Pw9d6r+PVswQgNuVSC/v7O+KCjBxzMq/9/UDODJ8lE+O0HOBmTim7P3BJKz87D+bg0nI9Nw78JBUnFnbTsYo9npF8wlNbdxhgNbUw0Q2mvJWVg9M/nEBGbBt/ZYSXGczI6FW5WRoi9/wjR9x4hOuURou89RPS9R4hJeaS5pQMA3o6m2Dmu/QteASIqJJPJYGhoiHv37kEul2tmvqSqp1arce/ePRgaGkIme7EUgQmGiMJvP9D0uZjYtRGGtHXFL6djn7MXsPNiAr7Y8S/Ssgrms+/n64gJXRrVqG/Vfi71sPBNH3zy2wUABf0lrt/NxLnbDxARm4ZzsQ9w895DFNdS52xhgKb2ZmjiYIom9qZo4mAKezNlsZ1Vs5+ZJMzR3ADuNsbwsC5IQLZHxOPMrQeY/sdlzNoZCVUpLSFmBnKkZ+fhVkoWZu+MhJ2pEu++3ODFLgQRQSKRwN7eHjExMbh9+7bY4dR5enp6qF+//gsPAGCCIaKPfomASi2gt48DxnV6/jzzmY/zMP33y9gWcQcA4GVvijl9m8LPxaKyQ9U5iUSC1/2csOl0LM7efoAxG4pfwM7F0hAtnc3R3MkcTRxM4WVvqtX68TxNHEyx5+P2yFcJaGBtVGRis6tJGThz6wGAgplMjfSlcLM2QgMrYzSwNoKblRHcrY3hZmWE26lZ6LH4CB7m5GPV0YL+I529bNDA2riCV4GICunr66Nhw4aa5nkSj76+vk5akZhgiCgtKw8uloaY+5r3czPF2NQsjPzpDG4kP4SeBPiwowfGdW5Y6kyaNYG54ZMRLQZyKXyczeBbvx5869dDi/rmsNJB51Qv+5JnmxvfpRFa1jeHjYkS7tbGsDVVlPiz8LQzwZt+Trj3MAcnolKRk6/WdCIlohenp6fHmTxrESYYIlvwpg9MlKV/Iz8VnYrRP4fjQVYebEwUWPq2b41stSjO9F5N0LWJDbzsC2536GqSr7KyMNLHay3LtmyxVE+Cb970AQC0mvsX7mXmVGZoREQ1Ws3++lvDdW1ii1aupScKR2+kYOjq03iQlYfmTmb448OXak1yAQDOFoYY0Ko+mjuZV3ly8SIK+4YMXnkSB68lixsMEVE1VHP+otcScqke7EwLmgBn9G5aat2jN1Iw8qczyMlXo1NjG/z6flvYmbH5sDowVRY0/j3IysOaY7eQr+KtEiKipzHBqGJSPQl2ffQSTk/tDMdShpNeiE/DqHUFyUUXLxssfdu3zHNjUOVb0N8HDayNAACHr9+D/9y/cP8RO6cRERVigiECS2MFbExKb4m4l5mDx3lqdPC0RuhgPyhkTC6qE9/69fD1680122lZeTgRlSpiRERE1QsTjGom96mmdi97U/wwyBf6Mv6YqiN/l3r4+5MgFK5k/8HGc5zqmIjoP/zkqmZMnxpRsmqYPxfoqsYkEgncrY0xqj0n2yIiehYTjGqmSxNbfNjRA7s+eqlGTPlNwOggLjdPRPQsfj2uZowVMkzq5il2GERERC+ECQaRDuWpBFxJTMe52Ac4F5uGnDwVvnnTp1zTmxMR1QZMMIh0qPnMfUWmD3/1+j309nEQKSIiInGwDwbRC1LK9aD4b6TP4zw1zAzk6OhpDYf/JkVTl7JCKxFRbSV6ghEaGgo3NzcolUr4+fnhyJEjpdZfsmQJvLy8YGBgAE9PT6xbt66KIiUqnqG+DOtHBmDBmz74a2IQIr7sijUjWsPdpmCV1d/C4/DuurM4F/tA5EiJiKqOqLdINm/ejPHjxyM0NBTt2rXDsmXL0L17d0RGRqJ+/fpF6i9duhRTpkzBihUr0KpVK5w+fRrvvvsu6tWrh169eonwDogKtHazQGs37TViCldlPXazYAKu9Kw8tPOwgr9rPbTzsKryGImIqpJEEHFmoICAAPj6+mLp0qWaMi8vL/Tt2xchISFF6gcGBqJdu3b45ptvNGXjx4/H2bNncfTo0TKdMyMjA2ZmZkhPT4epacnLeBO9qH2Xk7DicDSy81S4nJChKbc2UWDea80QEfsAzZ3M8Yq3nYhREhGVXXk+Q0VrwcjNzUV4eDgmT56sVR4cHIzjx48Xu09OTg6USu0ptg0MDHD69Gnk5eVBLi/aUz8nJwc5OU+W1c7IyChSh6gydGtqh25N7fDvnXQMWnESBvpS3M3Iwb3MHLy77qymXkxID01rRyG1WsD15EycufUAlkb66NHMvkznzHich4tx6fg3IR3+LvXg/9RqvXczHuNifDouxafhQnw6VGoBSwb5wsyQI1yISPdESzBSUlKgUqlga2urVW5ra4ukpKRi9+nWrRtWrlyJvn37wtfXF+Hh4Vi9ejXy8vKQkpICe/uif4RDQkIwc+bMSnkPRGXh7WiGC9ODkZ2nQuBXB5CWlYd6hnI8yMoDAMz8MxKf9/DCpTtpOB3zAGdu3cfZW/eR8Thfc4wjn3WEs4Wh1nFVagE3kjMREZuGiNgHiIhNw817D/F0m+TEro0Kkoo7abibkYNnvbf+LDa/37Zy3jgR1Wmi3SJJSEiAo6Mjjh8/jrZtn/yBmzt3LtavX4+rV68W2Sc7OxsffPAB1q9fD0EQYGtri7fffhvz58/H3bt3YWNjU2Sf4lownJ2deYuERJGVm4/HeWqYKmXwmLpHU66Q6SEnX3t4q6G+FFm5KgCAhZE+DnwShPDbD3Duv2TiQlwaHv33elnoSYCGNiZo7mSG38LjNeV9WzhgXOeGcLc2fsF3R0S1XY24RWJlZQWpVFqktSI5OblIq0YhAwMDrF69GsuWLcPdu3dhb2+P5cuXw8TEBFZWxXeaUygUUCgUOo+fqCIM9WUw1C94/vPIALy96hQAICdfDQsjffi71ENrNwu0crVAEwdT9F1yDJcTMnD/US5azAor5nhS+DiZo2V9c7SsXw8tnM1Rz1CO4WvOICE9Gz5O5mjmaIbmTmZo4mAKQ/2C//LvvtwAwf87DADYcT4BOy8mInLWK1xYj4h0RvROnn5+fggNDdWUNWnSBH369Cm2k2dxgoKC4OjoiI0bN5apPjt5UnWhVgv4+dRtyKV6aOVqAXdroyJ9Me4/yoXv7CeJRQNrI/jWrwff+vXQsr45GtmaQKonefbQZbL+xC18+ftlzbaPkxkczA2Qnp2Hr/o1R31Lw1L2JqK6qDyfoaImGJs3b8aQIUPw448/om3btli+fDlWrFiBy5cvw8XFBVOmTMGdO3c0c11cv34dp0+fRkBAAB48eIBFixYhLCwM4eHhcHV1LdM5mWBQTXP21n2kPsqFn0s9WBnrtjXubsZjBMz7u9jXouf1QL5awLWkTJyPL7glo1ILmPuaNySQIDIxA5fi0xB7PxsDWjnD085Ep7ERUfVTI26RAMCAAQOQmpqKWbNmITExEd7e3ti9ezdcXFwAAImJiYiNjdXUV6lUWLhwIa5duwa5XI6OHTvi+PHjZU4uiGqip0eC6JqtqRLLhvhh8d834GJpiN2XntyybPjFHkj1JMh9pm/I9og7kOpJoHpqhtLVx2LgYWOM9g2tMLaDB/69k45/76Tj0p10qAXgfwN8YKLkaBWiukTUFgwxsAWDqGTJmY/Req52i4aZgRw+zuY4fP2eVrmVsQIpD4uOTCmOtYkCZ6Z20VmcRCSOGtOCQUTVi42JEr++3xYHryWjsZ0JfJzM4WJpCIlEguh7D7E/8i7crIzQ3MkMdqZKZOWqsPSfKAgQsORgFABAIgEaWBmhmaMZdpxPAADcy8zB/L1X8dkrjcV8e0RUhdiCQUQ6EZuahbuZj+FlbwpjRcF3l9SHOfCb8xcAwMFMieNTOosZIhG9oPJ8hnJMGhHpRH1LQ7RytdAkFwBgaazAd2+1AADIpPxzQ1SX8H88EVUqp3oFw11j72ehzw9HcTUpA3Ws4ZSoTmKCQUSVyszgyeiRC/HpeOXbIxi+5oyIERFRVWCCQUSVysPGGKGDfWGqfHLr5ND1ezgRlao11JWIahcmGERU6Xo0s8fZL7pi8cCWmrKBK05i77/FL2xIRDUfEwwiqhL6Mj0EN7FFAysjTdlv4XEiRkRElYkJBhFVGaVcir8/CUK/lo4AgH+u3UNsapbIURFRZWCCQURVSiKR4K3W9TXbH2w8h+7fHcG/d9JFjIqIdI0JBhFVudZuFmhgXXCr5NKddFxJzMCr3x8t89TjRFT9McEgIlFM6e6F/v5O8LR9sgrrlcQMESMiIl3iWiREJIquTWzRtYktAMB/ThhSHuZi96UkHLuZimGBLrA3MxA5QiJ6EUwwiEh01iZKpDzMxabTsQAAPQm4MBpRDcdbJEQkuu7edrAy1oeNiQIAkJ2nEjkiInpRXE2ViKqNb/Zd1Sz7vnhgS9y4m4mHOfn4qFND1DPSFzk6IirPZyhvkRBRtWH3VL+LjzZFaJ6vOXYLRvpSnPy8M0yU8uJ2JaJqhrdIiKja6O/vhCb2Bd+KHM21O3k+ylVh4f7rYoRFRBXAWyREVO08zMmHsUKGhzn5OB+bhrdXndK85uNsjs3vtYFSLhUxQqK6qTyfoWzBIKJqx1gh0/z7UkMrfPdWC81rF+LS4D19n0iREVFZMcEgomqvW1M7fNHTS7OtqlsNr0Q1EhMMIqr2lHIpRrVvgOOTOwEA5Hr800VU3fF/KREREekcEwwiqnEE8BYJUXXHBIOIapw8lYCBy08iJ58zfhJVV0wwiKjGsHhqNs8T0anw/GIvpmy7BAAQBAF30rKRp1KLFR4RPYUzeRJRjaGUS3Ho0w4I+uYfTdmm07F48CgXp2JS8SArDwDQp4UDZvXxhpkBZ/0kEovoLRihoaFwc3ODUqmEn58fjhw5Umr9DRs2wMfHB4aGhrC3t8eIESOQmppaRdESkdhcLI1w+vPOGNfJQ1O293KSJrkAgN/PJ+DvK3fFCI+I/iNqgrF582aMHz8eU6dORUREBNq3b4/u3bsjNja22PpHjx7F0KFDMXLkSFy+fBm//fYbzpw5g1GjRlVx5EQkJhtTJT4J9sTwQFe0drPAR508sPHdAIxo56qp89mWi/jzQoJmOy0rF9fvZkKtZgdRoqog6lThAQEB8PX1xdKlSzVlXl5e6Nu3L0JCQorUX7BgAZYuXYqoqChN2ffff4/58+cjLi6uTOfkVOFEtdu7684iLPJJ64W+VA8NbY1xOSEDAPDdWy3Qp4WjWOER1Wg1Yqrw3NxchIeHIzg4WKs8ODgYx48fL3afwMBAxMfHY/fu3RAEAXfv3sWWLVvQs2fPEs+Tk5ODjIwMrQcR1V4jAl0R4Gah2c5VqTXJBQB8/Mt5xKZmiREaUZ0iWifPlJQUqFQq2NraapXb2toiKSmp2H0CAwOxYcMGDBgwAI8fP0Z+fj569+6N77//vsTzhISEYObMmTqNnYiqr0APKwR6WCE2NQuTtlxAAysjtHW3xNlbD7D+5G0AwMvfHMRnr3hCX6qH41GpuJXyCNN6NUEHTxuRoyeqPUS7RZKQkABHR0ccP34cbdu21ZTPnTsX69evx9WrV4vsExkZiS5dumDChAno1q0bEhMT8emnn6JVq1ZYtWpVsefJyclBTk6OZjsjIwPOzs68RUJUx2Tl5uONpScQmVhyK+bV2a9wlVaiUtSIWyRWVlaQSqVFWiuSk5OLtGoUCgkJQbt27fDpp5+iefPm6NatG0JDQ7F69WokJiYWu49CoYCpqanWg4jqHkN9GXZ/3B5z+nr/ty1FR09r2JkqNXX+vpIsVnhEtY5ot0j09fXh5+eHsLAwvPbaa5rysLAw9OnTp9h9srKyIJNphyyVFnzbELGvKhHVIG+3cUF/f2dIJIBcqofUhznwm/MXgIJWDiLSDVGHqU6cOBErV67E6tWrceXKFUyYMAGxsbEYPXo0AGDKlCkYOnSopn6vXr2wbds2LF26FNHR0Th27Bg++ugjtG7dGg4ODmK9DSKqYfRlepBLC/78WRor0NHTWuSIiGofUWfyHDBgAFJTUzFr1iwkJibC29sbu3fvhouLCwAgMTFRa06M4cOHIzMzEz/88AM++eQTmJubo1OnTvj666/FegtERERUDFHnwRAD58EgomeNWHMaB6/dAwB80dMLo9o3EDkiouqpRnTyJCKqLgz0n4wcWXEkWsRIiGoPJhhEVOeN69QQ7RtaAQDuZuRg/+Xi5+IhorJjgkFEdZ6XvSkW9vfRbP9+PqGU2kRUFkwwiIgA2JgoMcDfGQAgQEC+So1zsQ/w3V83MG/3FeSp1CJHSFSziDqKhIioOvF2NMXms8DxqFS0nB2GzMdP5sVYfjga899ojjf9nCCRSESMkqhmYAsGEdF/9GUFfxLTsvKQ+Tgfpkrt72CfbbmI387GixEaUY3DFgwiov+84m2PyIQMWBor0L6hFZo7mUOqJ8HSf6Lw9d6C9ZFuJGeKHCVRzcAEg4joP2YGcszs412kfEwHd6Rl5WLZYQ5hJSor3iIhIioLdrsgKhcmGERE5bDiSAyGrDqFm8mZOBf7gAstEpWACQYRURmYGcg1z4/cSEGXRYfRL/Q4/rjwZM4MtZrJBlEhrkVCRFQG6dl5+ONCAr7c8W+R10yVMvg4m+PIjRQAwM5xL8Hb0ayqQySqdOX5DGWCQURUDrdSHiH+QTYuJ6QjZM/VUusOD3RFnxYOaFm/XhVFR1S5uNgZEVElcbUywksNrfB+kDv2jm8PmZ4E7Rta4YueXrAxUWjVXXv8FqZsu4Sk9MciRUskHrZgEBHpyOM8Ff4Xdh07LybiTlq21mvtG1ph/cgAkSIj0g3eIikFEwwiqgo3kzPRZdFhrbLPXvFEUwczuFoawsXSSKTIiCqOCUYpmGAQUVWJf5CFe5k5eC30uFa5kb4UByd1gADAxkTBtU2oxmAfDCKiasCpniFa1q+HV5raaZU/ylWh9by/ETDvb2w7d0ek6IgqF1swiIiqSFpWLrp9exh3M3K0yt/wc8KCN31Eioqo7NiCQURUDZkb6mPFUH+E9GuGDzt6aMq3hHOFVqp9uNgZEVEVau5kjuZO5gCAlxtZo/+yEwCAXRcT0bO5vYiREekWWzCIiETiaWuief5beJyIkRDpHhMMIiKRmBnKMTzQFQBwIioVeSq1uAER6RATDCIiETX7b82SnHw1/jif8JzaRDUHEwwiIhG187DSPI97kKX1Wm4+WzSo5uIwVSIikU3ZdhGbTj/pg9HE3hQyqQQX49MBAH4u9RB7v2DSLnszJRLTH6NTYxsseNMHFkb6YoVNdRCHqRIR1SDWxtqLpEUmZmiSCwAIv/0A9zIL5s5I/G/htANXk/HVnitVFyRROYmeYISGhsLNzQ1KpRJ+fn44cuRIiXWHDx8OiURS5NG0adMqjJiISLfefbkBfnzbF5+94gkAeLW5Pea/0RzDA12hkOlhcEB9NHUwxTvt3PBBR3fNfvsu34X/nL8w5udwsUInKpGot0g2b96MIUOGIDQ0FO3atcOyZcuwcuVKREZGon79+kXqp6enIzv7yQqF+fn58PHxwbhx4zBjxowynZO3SIiopvvjQgI+2hShVRYT0oNrmlClqzGLnQUEBMDX1xdLly7VlHl5eaFv374ICQl57v47duxAv379EBMTAxcXlzKdkwkGEdV0Wbn5mL/3GvQkEqw+FgOACQZVjRrRByM3Nxfh4eEIDg7WKg8ODsbx48dL2EvbqlWr0KVLl1KTi5ycHGRkZGg9iIhqMkN9GWb0booPOz2ZbnzT6ThkPM4TMSoibRWaKvzRo0f46quv8PfffyM5ORlqtfZQqujo6OceIyUlBSqVCra2tlrltra2SEpKeu7+iYmJ2LNnDzZu3FhqvZCQEMycOfO5xyMiqsk+334JkYnpmNO3mdihEAGoYIIxatQoHDp0CEOGDIG9vf0LNcs9u68gCGU63tq1a2Fubo6+ffuWWm/KlCmYOHGiZjsjIwPOzs4VipWIqDoxN5DjJQ8rHL2ZAgD4+WQshge6wcPGWOTIiCqYYOzZswe7du1Cu3btKnxiKysrSKXSIq0VycnJRVo1niUIAlavXo0hQ4ZAX7/0MeAKhQIKhaLUOkRENZGengQ/jwrAwWvJGLHmDACgy6JDiJ7XA3p67I9B4qpQH4x69erBwsLihU6sr68PPz8/hIWFaZWHhYUhMDCw1H0PHTqEmzdvYuTIkS8UAxFRbdDR0wa9fBw024UdP4nEVKEEY/bs2Zg2bRqysrKeX7kUEydOxMqVK7F69WpcuXIFEyZMQGxsLEaPHg2g4PbG0KFDi+y3atUqBAQEwNvb+4XOT0RUW3zzRnPN8zm7rmDcpgh0WvAPWszaj9upj0SMjOqqCt0iWbhwIaKiomBrawtXV1fI5XKt18+dO1em4wwYMACpqamYNWsWEhMT4e3tjd27d2tGhSQmJiI2NlZrn/T0dGzduhXfffddRUInIqqVlHIp5vT1xhc7/gUA/HnhycJpPx6KQki/5iXtSlQpKpRgPK9jZXmMHTsWY8eOLfa1tWvXFikzMzN74ZYTIqLaaHBAfZyPS8OW8Hj09nHAH/8lGRnZ+SJHRnURFzsjIqqlVh+NwaydkQCA5k5msDZWoKmDKfq2dMSlO+mIf5CNga3rc8E0KrPyfIZWqAWjUHh4OK5cuQKJRIImTZqgZcuWL3I4IiLSocZ2JprnhYun/X01GYsP3NSqN7aDu2Z6gNx8NRLTs+FUzxBSjkShF1ChFozk5GS89dZb+Oeff2Bubg5BEJCeno6OHTvil19+gbW1dWXEqhNswSCiumRreDxWHo3BlUTtWYwN9aXIylVplVkZK5CenYs8lQADuRTnvuwKA31pVYZL1Vylr0UyYMAAREVFYf369fDy8gIAREZGYtiwYfDw8MCmTZsqFnkVYIJBRHVVdq4K5+PS4G5jhL+vJGPKtkul1u/oaY01I1pXUXRUE1R6gmFmZoa//voLrVq10io/ffo0goODkZaWVt5DVhkmGEREgFot4GR0Km7fz0JMyiMcuZGCvi0c4O1ohsErT2nqOdUzwP4JL8NQ/4XuqFMtUel9MNRqdZGhqQAgl8uLrEtCRETVj56eBIEeVihuWsNtYwPRL7Rg0cn4B9n4es9VzOzjjZx8FRQy3jKhsqnQRFudOnXCxx9/jISEJ+Os79y5gwkTJqBz5846C46IiKqeb/16OPp/HTXbe/5NQrf/HYbnF3sxf+9VESOjmqRCCcYPP/yAzMxMuLq6wt3dHR4eHnBzc0NmZia+//57XcdIRERVzKmeIRa86QMASM7MwbW7mQCAs7ceiBkW1SAVukXi7OyMc+fOISwsDFevXoUgCGjSpAm6dOmi6/iIiEgkXbxs8EpTO5gbyiGX6mH9ydvIzOGkXVQ2nGiLiIiea8+lRIzZ8GQZiJVD/RHkaQ2pRMKVW+uQSunkuXjxYrz33ntQKpVYvHhxqXU/+uijsh6WiIhqAC977Q+TUevOap43tjPBznEvQSat0F13qqXK3ILh5uaGs2fPwtLSEm5ubiUfUCJBdHS0zgLUNbZgEBFVzPW7mQj+3+FiX/uipxcUMj0YK2Vo6mCGRrYFs4jmqdRIz86DlbGiKkOlSlLp82DUZEwwiIhe3O3URzh8/R6+/P1ysa83sTdF5DOzh77Tzg3TejWpivCokpTnM1Qn7VkqlQrnz5/HgwfsXUxEVBe4WBphSFtXDAqoX+zrzyYXALD6WAyyctlJtK6oUAvG+PHj0axZM4wcORIqlQovv/wyTpw4AUNDQ+zcuRMdOnSohFB1gy0YRES6JQgCBAGQSICF+68jOfMxrIwVMFLI4GlrgqM3U7D2+C0AwJTujfF+kLu4AVOFVfotEicnJ+zYsQP+/v7YsWMHPvjgAxw8eBDr1q3DwYMHcezYsQoHX9mYYBARVa18lRoeU/dolb33cgN83sNLpIiooir9FklKSgrs7OwAALt378abb76JRo0aYeTIkbh0qfTFc4iIqG6RSfUw/43mWmXLD0cj5WGOSBFRVahQgmFra4vIyEioVCrs3btXM8FWVlYWpFLOU09ERNre9HPCFz29MLC1s6Zs7IZzcJ28C+M2RaCOjTeoEyo0k+eIESPQv39/2NvbQyKRoGvXrgCAU6dOoXHjxjoNkIiIaj6JRIJR7RsAALZH3MHjPDVOx9wHAPx5IQF5+Wr8OMRPzBBJxyqUYMyYMQPe3t6Ii4vDm2++CYWiYHyzVCrF5MmTdRogERHVLp92a4zTMalwNDfE6mMxAIC9l5Mwd1ckPujoAXNDfZEjJF3gPBhERCSak9GpeGv5Sc32zN5NMSzQVbyAqFSVMoqktkwVzgSDiKj6EAQBk7dewuazcVrlQY2s8eWrTeBhYyxSZFScSkkwOFU4ERFVlq/2XMWPh6K0yj7q5IGJwZ4iRUTF4VThpWCCQURU/WQ8zsPyQ9H4+dRtpGXlacoVMj286e+E5Iwc7I+8CwA4PrkTHMwNxAq1TmOCUQomGERE1dvGU7H4fHvJcyrJpRJsGR2IPJUat1OzEOhhCXszJhxVoVKWa3/aG2+8AX9//yIjRr755hucPn0av/32W0UOS0REhIGtnWGilGHcpggAQPuGVmjrbon5e68BAPJUAvos0Z4xet/4l+FpZ1LlsVLJKjTR1qFDh9CzZ88i5a+88goOHy5+Kd+ShIaGws3NDUqlEn5+fjhy5Eip9XNycjB16lS4uLhAoVDA3d0dq1evLtc5iYio+pJIJOjl44BbX/XEra96Yv3IAIzt4IGTUzqXuE+3bw/DdfIu9F92gguqVRMVasF4+PAh9PWLjlOWy+XIyCi6gl5JNm/ejPHjxyM0NBTt2rXDsmXL0L17d0RGRqJ+/eJX6Ovfvz/u3r2LVatWwcPDA8nJycjP5y8TEVFtZ2emRExIDyRn5sDSSB9qAZj+x2VsOh2rqXM65j7eXx+O1cNbQS7VyYLhVEEV6oPRqlUr9OrVC9OmTdMqnzFjBv7880+Eh4eX6TgBAQHw9fXF0qVLNWVeXl7o27cvQkJCitTfu3cv3nrrLURHR8PCwqK8YQNgHwwiotrmcZ4KKw5HY2HYda3yneNegrejmUhR1U6V3gfjyy+/xOuvv46oqCh06tQJAPD3339j06ZNZe5/kZubi/Dw8CL9OIKDg3H8+PFi9/njjz/g7++P+fPnY/369TAyMkLv3r0xe/ZsGBgU38EnJycHOTlPFtQpTwsLERFVf0q5FOM6N4S/qwUGrngyader3x/FxRnBMFXKRYyu7qpQ+1Hv3r2xY8cO3Lx5E2PHjsUnn3yC+Ph4/PXXX+jbt2+ZjpGSkgKVSgVbW1utcltbWyQlJRW7T3R0NI4ePYp///0X27dvx7fffostW7bggw8+KPE8ISEhMDMz0zycnZ1LrEtERDVXW3dL3PqqJ17ysNKUHbuRImJEdVuFb1D17NkTx44dw6NHj5CSkoIDBw4gKCio3MeRSCRa24IgFCkrpFarIZFIsGHDBrRu3Ro9evTAokWLsHbtWmRnZxe7z5QpU5Cenq55xMXFFVuPiIhqhxVD/TXP1XVqIobqpcIJRlpaGlauXInPP/8c9+8XrIh37tw53Llzp0z7W1lZQSqVFmmtSE5OLtKqUcje3h6Ojo4wM3tyT83LywuCICA+Pr7YfRQKBUxNTbUeRERUexnoSxHgVrF+eqQ7FUowLl68iEaNGuHrr7/GN998g7S0NADA9u3bMWXKlDIdQ19fH35+fggLC9MqDwsLQ2BgYLH7tGvXDgkJCXj48KGm7Pr169DT04OTk1NF3goREdViuy8lIu5+lthh1EkVSjAmTpyI4cOH48aNG1AqlZry7t27l2sejIkTJ2LlypVYvXo1rly5ggkTJiA2NhajR48GUHB7Y+jQoZr6gwYNgqWlJUaMGIHIyEgcPnwYn376Kd55550SO3kSEVHdtetSItrPPwjXybvwya8X8MHGczgexX4ZVaFCo0jOnDmDZcuWFSl3dHQssYNmcQYMGIDU1FTMmjULiYmJ8Pb2xu7du+Hi4gIASExMRGzsk/HNxsbGCAsLw7hx4+Dv7w9LS0v0798fc+bMqcjbICKiWirI0xqnYu5rlW09V3ArfdfFRGx+rw0CGliKEVqdUaF5MGxtbbF37160bNkSJiYmuHDhAho0aID9+/dj5MiR1bojJefBICKqGwRBQFjkXWw9F48ztx7AQC7FnbQnAwLeD2qAKd29RIyw5inPZ2iFbpH06dMHs2bNQl5ewYp3EokEsbGxmDx5Ml5//fWKHJKIiEinJBIJgpvaYdkQf5z7siuOTe6Efi0dNa+vOXpLvODqgAolGAsWLMC9e/dgY2OD7OxsBAUFwcPDAyYmJpg7d66uYyQiItKJicGN8HabgqUoclVqjFx7Bjn5KpGjqp1eaLn2AwcO4Ny5c1Cr1fD19UWXLl10GVul4C0SIqK6LTtXBa9pezXbc1/zxuAAFxEjqjnK8xla7gQjPz8fSqUS58+fh7e39wsFKgYmGEREFJmQgR6LtVfvft3XCcejUpCY/hgvN7LGsrf9YKAvFSnC6qlS+2DIZDK4uLhApWKTEhER1UxNHEzxUeeGWmVbz8UjMf0xAODw9XvwmrYXN5MzoeJ0oBVSoT4YX3zxBaZMmaKZwZOIiKimeaedK0L6NUNDG2P4OJtjbAd3TO/VRKtOl0WHMWz1aZEirNkq1AejZcuWuHnzJvLy8uDi4gIjIyOt18+dO6ezAHWNt0iIiKg0j/NUaD33L2Q8zteULR7YEj287SCTVniFjVqh0pdr79u3LyQSCV6gfygREVG1pJRLcXpqF+y7nISPfzkPAPhoUwQ+AmCilGFy98bsFFoG5UowsrKy8Omnn2LHjh3Iy8tD586d8f3338PKyur5OxMREdUQSrkUvZo7YMPJWJy+9aQ7QObjfPwv7AYGtqoPPb3iV/6mAuW6RfLpp58iNDQUgwcPhoGBATZu3IgOHTrgt99+q8wYdYq3SIiIqDwEQcDRmyn4/sBNnP5v+nEDuRQXZwRDXsdumVTaLZJt27Zh1apVeOuttwAAgwcPRrt27aBSqSCVcigPERHVPhKJBO0bWsPd2hiBXx0AAGTnqbBw/3VM7t5Y5Oiqr3KlXnFxcWjfvr1mu3Xr1pDJZEhISNB5YERERNWJg7kBzn3ZVbP946Eo3M14LGJE1Vu5EgyVSgV9fX2tMplMhvz8/BL2ICIiqj0sjPTxw6CWmu3/23pRxGiqt3LdIhEEAcOHD4dCodCUPX78GKNHj9Yaqrpt2zbdRUhERFSNvNrcAXN3XUFi+mPcf5QrdjjVVrkSjGHDhhUpe/vtt3UWDBERUU0w77VmGLH2jNhhVGvlSjDWrFlTWXEQERFRLVK3xtcQERHp0MX4dLy77ixy89Vih1LtMMEgIiIqJ2PlkxsAYZF3MXkbO3s+iwkGERFROfm71MP4Lk9WY9127g4yH+eJGFH1wwSDiIionCQSCcZ3aYTfRrfVlOXwNokWJhhEREQV1MrVQvM87n6WiJFUP0wwiIiIdICTbmljgkFERPQCXvIoWFGcI0m0McEgIiJ6AYWdPSUSLt/+NCYYREREOhCT8giuk3fhZnKm2KFUC0wwiIiIXoCDuYHWdpdFh3Hg6l2Roqk+mGAQERG9AAdzAxz+tCP8XOppyj7adF68gKoJ0ROM0NBQuLm5QalUws/PD0eOHCmx7j///AOJRFLkcfXq1SqMmIiISFt9S0NsHROIsR3cAQAPc/KRk68SOSpxiZpgbN68GePHj8fUqVMRERGB9u3bo3v37oiNjS11v2vXriExMVHzaNiwYan1iYiIqkLvFg6a555f7MX3f9+AWi2IGJF4RE0wFi1ahJEjR2LUqFHw8vLCt99+C2dnZyxdurTU/WxsbGBnZ6d5SKXSKoqYiIioZA2sjLW2F4ZdR+t5f4sUjbhESzByc3MRHh6O4OBgrfLg4GAcP3681H1btmwJe3t7dO7cGQcPHiy1bk5ODjIyMrQeRERElUFfpoers19Bv5aOmrKUhzkIv/0A+aq6NU+GaAlGSkoKVCoVbG1ttcptbW2RlJRU7D729vZYvnw5tm7dim3btsHT0xOdO3fG4cOHSzxPSEgIzMzMNA9nZ2edvg8iIqKnKeVSLBrQAscmd9KUvb70ODym7sHlhHQRI6tasudXqVzPTkwiCEKJk5V4enrC09NTs922bVvExcVhwYIFePnll4vdZ8qUKZg4caJmOyMjg0kGERFVOitjfTjVM0D8g2xNWc/FR3FmahdYmyhEjKxqiNaCYWVlBalUWqS1Ijk5uUirRmnatGmDGzdulPi6QqGAqamp1oOIiKiyKWRSHPq0I/ZPeBlPf2+eXEfWLBEtwdDX14efnx/CwsK0ysPCwhAYGFjm40RERMDe3l7X4REREb0wqZ4EjWxNEBPSU9Nq8ffVZFxNqv39AUW9RTJx4kQMGTIE/v7+aNu2LZYvX47Y2FiMHj0aQMHtjTt37mDdunUAgG+//Raurq5o2rQpcnNz8fPPP2Pr1q3YunWrmG+DiIjouZYP8cNroQWDGLadu4PPe9TuFnVRE4wBAwYgNTUVs2bNQmJiIry9vbF79264uLgAABITE7XmxMjNzcWkSZNw584dGBgYoGnTpti1axd69Ogh1lsgIiIqkxbO5nCzMkJMyiOo6sDcGBJBEGr/u3xKRkYGzMzMkJ6ezv4YRERUpb7acxU/HorCyJfc8OWrTcQOp9zK8xkq+lThREREVPswwSAiIiKdY4JBRERUxVYdjcH9R7lih1GpmGAQERFVEWcLA83z0zH3RYyk8jHBICIiqiID/J0hlxbMujX65/BaPZqECQYREVEVkUn18Iafk2Y7Lav23iZhgkFERFSF5vRtJnYIVYIJBhERURWS6j1ZmOSn47dq7W0SJhhEREQiWXzgJubuuiJ2GJWCCQYREVEV++6tFprnq4/FoNmMfTgX+0C8gCoBEwwiIqIq1qeFI7aOaavZznycj36hx7HvchLUteSWCRMMIiIiEfi5WGDze220yt5fH44DV5NFiki3mGAQERGJJKCBJWJCeqCXj4OmbNS6s8jKzRcxKt1ggkFERCQiiUSC7we2xMSujTRl/7f1kogR6QYTDCIiomrgw44emud/XkjAmJ/Da/REXEwwiIiIqgE9PQm2jgnUbO/5NwktZoXhXmaOiFFVHBMMIiKiasLPpZ7WEFYAuJGcKU4wL4gJBhERUTXSp4Ujbn3VE47mBs+vXI0xwSAiIqqGDPWlAIANp2JFjqRimGAQERFVQzJpwUf0rouJyFepRY6m/JhgEBERVUPTXm2ieR6ZmCFiJBXDBIOIiKgaau5kpnk+b3fNWxCNCQYREVE1ZKSQoYOnNQAgO4+3SIiIiEhH3g5wETuECmOCQURERDrHBIOIiKiauxCXhpe+PoDkzMdih1JmTDCIiIiqKSsTheZ5/INsRMSmiRdMOYmeYISGhsLNzQ1KpRJ+fn44cuRImfY7duwYZDIZWrRoUbkBEhERicTHyQw/vdNa7DAqRNQEY/PmzRg/fjymTp2KiIgItG/fHt27d0dsbOmzlqWnp2Po0KHo3LlzFUVKRERU9SQSCYIaWcPPpZ7YoZSbqAnGokWLMHLkSIwaNQpeXl749ttv4ezsjKVLl5a63/vvv49Bgwahbdu2zz1HTk4OMjIytB5ERERUuURLMHJzcxEeHo7g4GCt8uDgYBw/frzE/dasWYOoqChMnz69TOcJCQmBmZmZ5uHs7PxCcRMREdHziZZgpKSkQKVSwdbWVqvc1tYWSUlJxe5z48YNTJ48GRs2bIBMJivTeaZMmYL09HTNIy4u7oVjJyIiotKJ3slTIpFobQuCUKQMAFQqFQYNGoSZM2eiUaNGZT6+QqGAqamp1oOIiKgmen99ONRqQewwyqRszQCVwMrKClKptEhrRXJycpFWDQDIzMzE2bNnERERgQ8//BAAoFarIQgCZDIZ9u/fj06dOlVJ7ERERFXJzcoI4bcfAADSsvNgYaQvckTPJ1oLhr6+Pvz8/BAWFqZVHhYWhsDAwCL1TU1NcenSJZw/f17zGD16NDw9PXH+/HkEBARUVehERERVat5rzcQOodxEa8EAgIkTJ2LIkCHw9/dH27ZtsXz5csTGxmL06NEACvpP3LlzB+vWrYOenh68vb219rexsYFSqSxSTkREVJvI9J50HZi/9yq+er25iNGUjagJxoABA5CamopZs2YhMTER3t7e2L17N1xcChZ3SUxMfO6cGERERLXd010TT0anihdIOUgEQagZvUV0JCMjA2ZmZkhPT2eHTyIiqjEOXL2Ld9aeRQNrIxz4pIMoMZTnM1T0USRERET0fEb6BTcdio6zrJ6YYBAREZHOMcEgIiIinWOCQURERDrHBIOIiIh0jgkGERFRDXI7NatGTBfOBIOIiKgGyVcLWHU0RuwwnosJBhERUQ3g5fBk3ombyQ9FjKRsmGAQERHVAKZKOT7t5gkA2Hw2Dj0XH0GeSi1yVCVjgkFERFRD2JoqNc8vJ2Rg96VEEaMpHRMMIiKiGqJPCwesH9las/3xL+dxJTFDxIhKxgSDiIiohpBL9dC+oTUmdm2kKVtxOFrEiErGBIOIiKiG+ahzQ/g4mQEAcvKrZz8MJhhEREQ10Ot+TmKHUComGERERKRzTDCIiIhI55hgEBERkc4xwSAiIqrBdl1KxJydkWKHUQQTDCIiohrIxkSheb7yaAyi7lWv6cOZYBAREdVAXbxsMaNXE812dq5KxGiKYoJBRERUA8mkehjezg12T00fXp0wwSAiIqrBBAgAgHuZOSJHoo0JBhERUQ2WpypIMEb+dEbkSLQxwSAiIqrBgpvYAihYp6Q6qV7REBERUbl80NEDQMGaJMejUqBWCyJHVIAJBhERUQ2mpyfRPB+04hQGrjgJQRA/yRA9wQgNDYWbmxuUSiX8/Pxw5MiREusePXoU7dq1g6WlJQwMDNC4cWP873//q8JoiYiIqhcHMyVebmSt2T4Vcx8X49NFjKiAqAnG5s2bMX78eEydOhURERFo3749unfvjtjY2GLrGxkZ4cMPP8Thw4dx5coVfPHFF/jiiy+wfPnyKo6ciIioepBIJFj3TmscnNRBU9ZnyTHRWzEkgogRBAQEwNfXF0uXLtWUeXl5oW/fvggJCSnTMfr16wcjIyOsX7++TPUzMjJgZmaG9PR0mJqaVihuIiKi6ujjXyLw+/kEAMDNud0h03HHz/J8horWgpGbm4vw8HAEBwdrlQcHB+P48eNlOkZERASOHz+OoKCgEuvk5OQgIyND60FERFQbzezdVOwQNERLMFJSUqBSqWBra6tVbmtri6SkpFL3dXJygkKhgL+/Pz744AOMGjWqxLohISEwMzPTPJydnXUSPxERUXV2PCpV1POL3slTIpFobQuCUKTsWUeOHMHZs2fx448/4ttvv8WmTZtKrDtlyhSkp6drHnFxcTqJm4iIqLpRyKSa5z8cuCliJIBMrBNbWVlBKpUWaa1ITk4u0qrxLDc3NwBAs2bNcPfuXcyYMQMDBw4stq5CoYBCoSj2NSIiotrEQF+Kt9vUx88nY5GnVosai2gtGPr6+vDz80NYWJhWeVhYGAIDA8t8HEEQkJNTveZfJyIiEktQIxsAQERsmqjrk4jWggEAEydOxJAhQ+Dv74+2bdti+fLliI2NxejRowEU3N64c+cO1q1bBwBYsmQJ6tevj8aNGwMomBdjwYIFGDdunGjvgYiIqDpRyp+0HWw8FYuPuzQUJQ5RE4wBAwYgNTUVs2bNQmJiIry9vbF79264uLgAABITE7XmxFCr1ZgyZQpiYmIgk8ng7u6Or776Cu+//75Yb4GIiKhaadvAUvP8UW6+aHGIOg+GGDgPBhER1XYhu69g2eFovPdyA3zew0tnx60R82AQERFR7cUEg4iIiHSOCQYRERHpHBMMIiIi0jkmGERERKRzTDCIiIhI55hgEBERkc4xwSAiIqqllh+ORp5KnDVJmGAQERHVMsaKJxN1i7VsOxMMIiKiWmZwGxfN85w8lSgxiLoWCREREemehZE+BgXUx/WkTJgb6osSAxMMIiKiWmjea81EPT9vkRAREZHOMcEgIiIinWOCQURERDrHBIOIiIh0jgkGERER6RwTDCIiItI5JhhERESkc0wwiIiISOeYYBAREZHOMcEgIiIinWOCQURERDpX59YiEQQBAJCRkSFyJERERDVL4Wdn4WdpaepcgpGZmQkAcHZ2FjkSIiKimikzMxNmZmal1pEIZUlDahG1Wo2EhASYmJhAIpHo7LgZGRlwdnZGXFwcTE1NdXbcuorXU/d4TXWL11P3eE11qzKupyAIyMzMhIODA/T0Su9lUedaMPT09ODk5FRpxzc1NeV/DB3i9dQ9XlPd4vXUPV5T3dL19Xxey0UhdvIkIiIinWOCQURERDrHBENHFAoFpk+fDoVCIXYotQKvp+7xmuoWr6fu8ZrqltjXs8518iQiIqLKxxYMIiIi0jkmGERERKRzTDCIiIhI55hgEBERkc4xwSij0NBQuLm5QalUws/PD0eOHCm1/qFDh+Dn5welUokGDRrgxx9/rKJIa47yXNNt27aha9eusLa2hqmpKdq2bYt9+/ZVYbTVX3l/RwsdO3YMMpkMLVq0qNwAa6DyXtOcnBxMnToVLi4uUCgUcHd3x+rVq6so2pqhvNd0w4YN8PHxgaGhIezt7TFixAikpqZWUbTV2+HDh9GrVy84ODhAIpFgx44dz92nSj+bBHquX375RZDL5cKKFSuEyMhI4eOPPxaMjIyE27dvF1s/OjpaMDQ0FD7++GMhMjJSWLFihSCXy4UtW7ZUceTVV3mv6ccffyx8/fXXwunTp4Xr168LU6ZMEeRyuXDu3Lkqjrx6Ku/1LJSWliY0aNBACA4OFnx8fKom2BqiIte0d+/eQkBAgBAWFibExMQIp06dEo4dO1aFUVdv5b2mR44cEfT09ITvvvtOiI6OFo4cOSI0bdpU6Nu3bxVHXj3t3r1bmDp1qrB161YBgLB9+/ZS61f1ZxMTjDJo3bq1MHr0aK2yxo0bC5MnTy62/meffSY0btxYq+z9998X2rRpU2kx1jTlvabFadKkiTBz5kxdh1YjVfR6DhgwQPjiiy+E6dOnM8F4Rnmv6Z49ewQzMzMhNTW1KsKrkcp7Tb/55huhQYMGWmWLFy8WnJycKi3GmqosCUZVfzbxFslz5ObmIjw8HMHBwVrlwcHBOH78eLH7nDhxokj9bt264ezZs8jLy6u0WGuKilzTZ6nVamRmZsLCwqIyQqxRKno916xZg6ioKEyfPr2yQ6xxKnJN//jjD/j7+2P+/PlwdHREo0aNMGnSJGRnZ1dFyNVeRa5pYGAg4uPjsXv3bgiCgLt372LLli3o2bNnVYRc61T1Z1OdW+ysvFJSUqBSqWBra6tVbmtri6SkpGL3SUpKKrZ+fn4+UlJSYG9vX2nx1gQVuabPWrhwIR49eoT+/ftXRog1SkWu540bNzB58mQcOXIEMhn/DDyrItc0OjoaR48ehVKpxPbt25GSkoKxY8fi/v377IeBil3TwMBAbNiwAQMGDMDjx4+Rn5+P3r174/vvv6+KkGudqv5sYgtGGT27tLsgCKUu915c/eLK67LyXtNCmzZtwowZM7B582bY2NhUVng1Tlmvp0qlwqBBgzBz5kw0atSoqsKrkcrzO6pWqyGRSLBhwwa0bt0aPXr0wKJFi7B27Vq2YjylPNc0MjISH330EaZNm4bw8HDs3bsXMTExGD16dFWEWitV5WcTv7o8h5WVFaRSaZEMOzk5uUgmWMjOzq7Y+jKZDJaWlpUWa01RkWtaaPPmzRg5ciR+++03dOnSpTLDrDHKez0zMzNx9uxZRERE4MMPPwRQ8OEoCAJkMhn279+PTp06VUns1VVFfkft7e3h6OiotZS1l5cXBEFAfHw8GjZsWKkxV3cVuaYhISFo164dPv30UwBA8+bNYWRkhPbt22POnDl1vjW4vKr6s4ktGM+hr68PPz8/hIWFaZWHhYUhMDCw2H3atm1bpP7+/fvh7+8PuVxeabHWFBW5pkBBy8Xw4cOxceNG3oN9Snmvp6mpKS5duoTz589rHqNHj4anpyfOnz+PgICAqgq92qrI72i7du2QkJCAhw8fasquX78OPT09ODk5VWq8NUFFrmlWVhb09LQ/pqRSKYAn37yp7Kr8s6lSuo7WMoVDq1atWiVERkYK48ePF4yMjIRbt24JgiAIkydPFoYMGaKpXzgUaMKECUJkZKSwatUqDlN9Rnmv6caNGwWZTCYsWbJESExM1DzS0tLEegvVSnmv57M4iqSo8l7TzMxMwcnJSXjjjTeEy5cvC4cOHRIaNmwojBo1Sqy3UO2U95quWbNGkMlkQmhoqBAVFSUcPXpU8Pf3F1q3bi3WW6hWMjMzhYiICCEiIkIAICxatEiIiIjQDPsV+7OJCUYZLVmyRHBxcRH09fUFX19f4dChQ5rXhg0bJgQFBWnV/+eff4SWLVsK+vr6gqurq7B06dIqjrj6K881DQoKEgAUeQwbNqzqA6+myvs7+jQmGMUr7zW9cuWK0KVLF8HAwEBwcnISJk6cKGRlZVVx1NVbea/p4sWLhSZNmggGBgaCvb29MHjwYCE+Pr6Ko66eDh48WOrfRbE/m7hcOxEREekc+2AQERGRzjHBICIiIp1jgkFEREQ6xwSDiIiIdI4JBhEREekcEwwiIiLSOSYYREREpHNMMIiIiEjnmGAQUa3g6uqKb7/9VrMtkUiwY8cO0eIhquuYYBDRCxs+fDgkEgkkEglkMhnq16+PMWPG4MGDB2KHRkQiYYJBRDrxyiuvIDExEbdu3cLKlSvx559/YuzYsWKHRUQiYYJBRDqhUChgZ2cHJycnBAcHY8CAAdi/f7/m9TVr1sDLywtKpRKNGzdGaGio1v7x8fF46623YGFhASMjI/j7++PUqVMAgKioKPTp0we2trYwNjZGq1at8Ndff1Xp+yOi8pGJHQAR1T7R0dHYu3cv5HI5AGDFihWYPn06fvjhB7Rs2RIRERF49913YWRkhGHDhuHhw4cICgqCo6Mj/vjjD9jZ2eHcuXNQq9UAgIcPH6JHjx6YM2cOlEolfvrpJ/Tq1QvXrl1D/fr1xXyrRFQCJhhEpBM7d+6EsbExVCoVHj9+DABYtGgRAGD27NlYuHAh+vXrBwBwc3NDZGQkli1bhmHDhmHjxo24d+8ezpw5AwsLCwCAh4eH5tg+Pj7w8fHRbM+ZMwfbt2/HH3/8gQ8//LCq3iIRlQMTDCLSiY4dO2Lp0qXIysrCypUrcf36dYwbNw737t1DXFwcRo4ciXfffVdTPz8/H2ZmZgCA8+fPo2XLlprk4lmPHj3CzJkzsXPnTiQkJCA/Px/Z2dmIjY2tkvdGROXHBIOIdMLIyEjT6rB48WJ07NgRM2fO1LQwrFixAgEBAVr7SKVSAICBgUGpx/7000+xb98+LFiwAB4eHjAwMMAbb7yB3NzcSngnRKQLTDCIqFJMnz4d3bt3x5gxY+Do6Ijo6GgMHjy42LrNmzfHypUrcf/+/WJbMY4cOYLhw4fjtddeA1DQJ+PWrVuVGT4RvSCOIiGiStGhQwc0bdoU8+bNw4wZMxASEoLvvvsO169fx6VLl7BmzRpNH42BAwfCzs4Offv2xbFjxxAdHY2tW7fixIkTAAr6Y2zbtg3nz5/HhQsXMGjQIE0HUCKqnphgEFGlmThxIlasWIFu3bph5cqVWLt2LZo1a4agoCCsXbsWbm5uAAB9fX3s378fNjY26NGjB5o1a4avvvpKcwvlf//7H+rVq4fAwED06tUL3bp1g6+vr5hvjYieQyIIgiB2EERERFS7sAWDiIiIdI4JBhEREekcEwwiIiLSOSYYREREpHNMMIiIiEjnmGAQERGRzjHBICIiIp1jgkFEREQ6xwSDiIiIdI4JBhEREekcEwwiIiLSuf8HheRKXapbYBcAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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YBAREZHBMWAQERGRwTFgEBERkcExYBAREZHBMWAQERGRwTFgEBERkcExYBAREZHBMWAQERGRwTFgEBERkcExYBAREZHBMWAQERGRwTFgEBERkcExYBAREZHBMWAQERGRwTFgEBERkcExYBAREdVBggDEp+eI9voMGERERHWIqVKqu7//3zjR6mDAICIiqkNMFDI0tTMDAGi0gmh1MGAQERHVMV6OFmKXwIBBREREhseAQURERAbHgEFEREQGx4BBREREBseAQURERAbHgEFEREQGx4BBREREBseAQURERAbHgEFEREQGx4BBREREBseAQURERAbHgEFEREQGJ3rAWLFiBTw8PKBSqeDj44Njx46Vuuzhw4chkUiK3W7cuFGNFRMREdUOV++lifbaogaMLVu2YNKkSZgxYwYuXbqEHj16oF+/foiKiipzvZs3byI2NlZ3a9q0aTVVTEREVPOpc/IBANsv3hOtBlEDxqJFizB27FiMGzcOLVq0wOLFi+Hq6oqVK1eWuZ6dnR0cHBx0N6lUWk0VExER1Xz9WjsAAJwsVaLVIFrAyMvLw4ULF+Dn56fX7ufnh5MnT5a5brt27eDo6IjevXvj0KFDZS6bm5uL9PR0vRsREVFd1szeHABgZCQRrQbRAkZSUhI0Gg3s7e312u3t7REXF1fiOo6Ojvj++++xbds2bN++Hc2bN0fv3r1x9OjRUl8nKCgIlpaWupurq6tB3wcREREVJxO7AIlEP10JglCsrUjz5s3RvHlz3eOuXbsiOjoaX3/9NZ577rkS15k+fTqmTJmie5yens6QQUREVMVE68GwtbWFVCot1luRkJBQrFejLF26dMGtW7dKfV6pVMLCwkLvRkRERFVLtIChUCjg4+ODkJAQvfaQkBB069at3Nu5dOkSHB0dDV0eERERPQVRD5FMmTIFI0aMQIcOHdC1a1d8//33iIqKwvjx4wEUHt64d+8efvzxRwDA4sWL4e7ujlatWiEvLw8///wztm3bhm3bton5NoiIiOgxogaMwMBAJCcnY+7cuYiNjUXr1q2xZ88euLm5AQBiY2P1zomRl5eHqVOn4t69ezA2NkarVq2we/du9O/fX6y3QERERCWQCIIgiF1EdUpPT4elpSXS0tI4HoOIiOqkS1EP8OKKwlM+XP3MD+YquUG2W5HvUNFPFU5ERESG5fDICbZO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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import precision_recall_curve\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Assuming 'predictions' is a NumPy array of shape (num_samples, num_labels)\n",
    "# and 'true_labels' is of the same shape\n",
    "num_labels = predictions.shape[1]\n",
    "\n",
    "for label_index in range(num_labels):\n",
    "    # Extract the true labels and predictions for the current label\n",
    "    true_labels_i = true_labels[:, label_index]\n",
    "    predictions_i = predictions[:, label_index]\n",
    "\n",
    "    # Compute precision-recall curve\n",
    "    precision, recall, thresholds = precision_recall_curve(true_labels_i, predictions_i)\n",
    "\n",
    "    # Plot the precision-recall curve for the current label\n",
    "    plt.figure(figsize=(6, 4))\n",
    "    plt.plot(recall, precision, label='Label {}'.format(label_index))\n",
    "    plt.xlabel('Recall')\n",
    "    plt.ylabel('Precision')\n",
    "    plt.title('Precision-Recall Curve for Label {}'.format(label_index))\n",
    "    plt.legend(loc=\"upper right\")\n",
    "    plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6cce9b12-26eb-4ce1-8ca7-3b591c6f9dad",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "d7e94300-836d-4693-93e1-2a7c422fdf4d",
   "metadata": {},
   "source": [
    "Confusion matrix with sns. However I could not get it to work"
   ]
  },
  {
   "cell_type": "raw",
   "id": "3d839b3c-a8ad-407f-b736-a415fb2c7b1e",
   "metadata": {
    "collapsed": true,
    "jupyter": {
     "outputs_hidden": true
    }
   },
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Iterate over each label\n",
    "for i, label in enumerate(mlb.classes_):\n",
    "    # Compute the confusion matrix for the current label\n",
    "    cm = confusion_matrix(true_labels[:, i], binary_predictions[:, i])\n",
    "    \n",
    "    # Visualization\n",
    "    plt.figure(figsize=(5, 4))\n",
    "    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',\n",
    "                xticklabels=['Not ' + label, label],\n",
    "                yticklabels=['Not ' + label, label])\n",
    "    plt.xlabel('Predicted Labels')\n",
    "    plt.ylabel('True Labels')\n",
    "    plt.title(f'Confusion Matrix for {label}')\n",
    "    plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8aeda3f-35ad-4ff7-b3b0-bb61af061a3e",
   "metadata": {},
   "source": [
    "Overall accuracy of model (not used for my evaluations)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "id": "eae8a397-98b3-4ce8-9262-b6a5db5b0ad4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy of the model on the test data: 42.16%\n"
     ]
    }
   ],
   "source": [
    "model.eval()\n",
    "with torch.no_grad():\n",
    "    correct = 0\n",
    "    total = 0\n",
    "    for inputs, labels in test_loader:\n",
    "        inputs, labels = inputs.to(device), labels.to(device)\n",
    "        \n",
    "        # Forward pass\n",
    "        outputs = model(inputs)\n",
    "        _, predicted = torch.max(outputs, 1)\n",
    "        \n",
    "        # Ensure labels are in the correct shape for comparison\n",
    "        if labels.ndim > 1:\n",
    "            labels = labels.argmax(dim=1)\n",
    "        \n",
    "        total += labels.size(0)\n",
    "        correct += (predicted == labels).sum().item()\n",
    "\n",
    "    accuracy = 100 * correct / total\n",
    "    print(f'Accuracy of the model on the test data: {accuracy:.2f}%')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4515160-a73c-421a-91db-87c2d67f063b",
   "metadata": {},
   "source": [
    "Gather Predictions and Actual Labels"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f52621f-3d73-4fe3-abd2-0597e8b196cc",
   "metadata": {},
   "source": [
    "## Results and Discussion"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "bec8f549-d17c-436e-84d1-a4da3b14c576",
   "metadata": {},
   "source": [
    "Architecture;\n",
    "\n",
    "I chose to use an LSTM for this task. LSTM have the benefit of being able to deal with time gaps compared to RNNs, which can be benefitial for time series data. Especially if the data contains complex patterns that span over long time periods. However just looking at the values in X, they seem to be repetetive (however I'm no medical professional), which might indicate that an RNN would be doing fine for this task as well.\n",
    "\n",
    "I did a pretty straightforward implementation of an LSTM;\n",
    "\n",
    "Weight;\n",
    "I used weights for label balancing. As NORM was a majority label. Without weights, my model predicted NORM more than the others.\n",
    "\n",
    "Dropout;\n",
    "I used dropout in order to prevent overfitting by introducing randomness into the training process.\n",
    "\n",
    "Normalization;\n",
    "I used normalization in order to avoid outliers in the data to have too much of an affect of the outcome of the model.\n",
    "\n",
    "I used BCEWithLogitsLoss because it's good for multi-label classification. It is particularly well-suited for problems where you need to make these kinds of binary decisions for each class independently. I used multi-labels (MultiLabelBinarizer) because is designed to handle cases where each sample can belong to multiple categories, which makes it good for the diagnostic_superclass data, which otherwise would have many categories. I thought it would be more effective for training to only have 5 labels, instead of 10+ categories.\n",
    "\n",
    "Number of layers;\n",
    "Without tabular data: I did not notice much difference changing the number of layers used. Except for when number of hidden layers were 1, then the performance of the model was very poor. I tested hidden layers 1,2,3,4,5,10. With 10 layers training the model got too slow to train. I used 2 layers for all my other tests.\n",
    "\n",
    "With tabular data: I found hidden_layers 2 to be good. 1,3,4 gave worse results, I didn't try any other number of hidden layers for tabular data as I assumed them also to be worse. My intuition was that I needed a higher number of layers for tabular data added, as there was more input information and thus more model complexity was needed, however I was wrong in that assesment. With more layers (e.g. 4), the model started to overfit to the parameters earlier than with fewer layers (2). I also tested increasing the number of hidden_size, but with no success.\n",
    "\n",
    "\n",
    "\n",
    "------\n",
    "\n",
    "Training strategy, epochs, dropouts or early stopping;\n",
    "I first used StepLR scheduler and experimented with low batch sizes (around 10,20,30,40,50, etc). I initially got lower losses, however the training losses fluctuated more with lower batch sizes.\r\n",
    "With higher batch sizes (128) I got more stable training losses , and it was much faster to train.  My validation losses were always quite stable, but not training losses. I tried using a different scheduler (ReduceLROnPlateau) in order to adjust the learning rate based on the performance of the model in order to reduce training loss fluctuations. This made the loss more stable. I also experimented with lowering the learning rate which helped, but it made training slower.\r\n",
    "\r\n",
    "I tried early stopping based on if training losses and validation losses both increased during the epoch. However I noticed that sometimes the validation loss would increase from e.g. 0.4722 to 0.4765 over 10 epochs, however the training loss would go from 0.4850 to 0.3450 during the same time. Which my simple early stopper would not consider an improvement, even though it was an improvement. So I switched to doing 50 epochs flat, and after training looking at the combined graph of training and validation losses in order to make an educated guess as to which epoch number was the best for training instead. I experimented with setting a train-validation-loss-tolerance in my early-stopper, so that it'd e.g. tolerate a 1% increase in validation loss if it meant a 10% decrease in training loss. However I found finickyult to fine-tune and I instead opted ftraininging a flat number of epocduringfor runtime and looking at the training and validation loss graph afterwards, in order to spot the best epo\n",
    "\n",
    "I found dropouts of 0.2 to give highest overall scores (at first I started at 0, and tested up to 0.5). \n",
    "\n",
    "I found hidden size of 128 to be fine. If it was too large then training got quite slow.\n",
    "\n",
    "\n",
    "\n",
    "--------\n",
    "\n",
    "Choice of error scores used;\r\n",
    "As I used multi-label classification, I tried to take into consideration mostly AUC ROC, F1 (micro), and hamming loss. As well as testing and validation loss. Due to having imbalanced classes; precision, recall, F1 score, and Hamming loss can provide more insight than accuracy. AUC ROC is useful for evaluating the model's discriminative ability for multi-label classification. Hamming loss is useful to see  the fraction of labels that are incorrectly predicted, especially for multi-label classification where hamming loss accounts for the prediction error across all labels. A low testing loss indicates better generalization and  a low validation loss indicates that the model isn't overfitting. F1 score is useful as a single metric  for precision and recall and works well with class imbalances. I used validation loss and testing loss for model selectio, however validation loss was pretty much always the limiting factor and thus had more of an impact in which model was chosenn. I tried to look at a combination of these metrics to get a holistic view of my model's performance.\r\n",
    "\r\n",
    "I didn't really look at Accuracy as it doesn't account for the imbalance between classes or the fact that multiple labels can be corre\n",
    "\n",
    "\n",
    "improvements;\n",
    "I could probably experiment more with data cleaning for the tabular data. As well as test encoding the tabular data separately from the time series data and merging it with the LSTM's output, instead of merging the tabular data with time series data into one numpy array directly, like I did in my model. \n",
    "\n",
    "\n",
    "\n",
    "Performance of models;\n",
    "Here are some of the models with best results from adding different settings;\n",
    "\n",
    "My best performing model is: Lstm_56202402292107, it has a slightly higher validation loss than lstm_55_202402281807 suggesting overfitting, however Lstm_56202402292107 has lower Hamming loss which indicates that it indeed doesn't have higher overfitting. It has the highest AUC-ROC-score and F1-score which indicates it's best at predicting each of the labels separetly, which is important as this is a multi-label-classification task.\n",
    "\n",
    "For my model with tabular data (Lstm_53202403011000); I got an increase in validation loss faster compared to my other models, after only 40 epochs. However it's not a better model compared to my other models. I suspect the increase in validation loss is due to increased number of parameters, which makes the model more easily get overtrained. And the parameters of the tabular data perhaps aren't that good in helping the model classify the labels.\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "Baseline model: Lstm_58_202402291630\n",
    "Settings\n",
    "\t• batch size training =20\n",
    "\t• Dropout rate= 0.2\n",
    "\t• Epochs = 10 (fixed)\n",
    "\t• Weight not used\n",
    "\t• Normalization not used\n",
    "    • Without tabular data.\n",
    "Result\n",
    "    Accuracy: 0.5815996301433195\n",
    "    Precision (Micro): 0.7830148619957538\n",
    "    Recall (Micro): 0.6583363084612638\n",
    "    F1 Score (Micro): 0.7152831652443755\n",
    "    Hamming Loss: 0.13573740175681923\n",
    "    Auc Roc: 0.7972864472179042\n",
    "\tTraining Loss: 0.3191\n",
    "    Validation Loss: 0.4799\n",
    "\n",
    "Model with added weight: \n",
    "lstm_55_20240228180t\r\n",
    "Settings\r\n",
    "\t• batch size training tch)\r\n",
    "\t• Dropout rate= 0.5epochs = 21 (derived from looking at training and validation loss graph after fixed epoch training)s set.\r\n",
    "\t• Weight used\r\n",
    "\t• Normalization \n",
    "    • Without tabular data.not used    Asult\r\n",
    "\t• Accuracy: 0.5510864    539990754\r",
    "Precision (Micro): 0.7073807    968647943\r",
    "Recall (Micro): 0.7732952    516958229\r",
    "F1 Score (Micro): 0.7388708    852123487\r",
    "Hamming Loss: 0.14156264    447526584\r",
    "Auc Roc: 0.830745\n",
    "    Training loss: 0.3421\n",
    "    Validation Loss: 0.446645 Training Loadded ss: 0.3191\r\n",
    "\r",
    ": Model with normalization\r\n",
    "Lstm_49_202402291648\r\n",
    "Settin4ss larger than traininut repochs = 17 (derived from looking at training and validation loss graph after fixed epoch training)er than 0.5)\r\n",
    "\t• 10 epochs set.\r\n",
    "\t• Weigh\n",
    "    • Without tabular data.t not use    \r\n",
    "\t• With normalization\r\n",
    "Resu    lt:\r\n",
    "\tAccuracy: 0.4932963476652797\r",
    "Pre    cision (Micro): 0.6507472384665367\r",
    "    Recall (Micro): 0.7151017493752231\r",
    "F1     Score (Micro): 0.6814084027895901    \r",
    "Hamming Loss: 0.17318539066    882\r",
    "Auc Roc: 0.7904\n",
    "    Validation Loss: 0.4566807474103467\r\n",
    "\t• Training lo: s: 0.37\r\n",
    "\r\n",
    "\r\n",
    "Model  (Best so far)with early stopping\r\n",
    "Lstm1286202402292107\r\n",
    "Settings\r\n",
    "Epochs = dynamic =20\r\n",
    "\t• Dropout rate= 0.2\r\n",
    "\t• Early \n",
    "    • Without tabular data.dropout\r",
    "    \t• Weight used\r\n",
    "\t• With norma    lization\r\n",
    "Result\r\n",
    "\tAccuracy: 0.5649560    795191864\r",
    "Precision (Micro): 0.7101    590392729633\r",
    "Recall (Micro): 0.781149    5894323456\r",
    "F1 Score (Micro): 0.7    439646378782727\r",
    "Hamming Los\n",
    "    Training loss: 0.3696\n",
    "    Validation Loss: 0.4766\n",
    "\n",
    "sModel with added\n",
    "\r\n",
    "0.3696, Va: idation Loss: 0.4766\r\n",
    "\r\n",
    "\r\n",
    "\r\n",
    "\r\n",
    "Combined with 128bular data\r\n",
    "Lstm_53202403011000\r\n",
    "Setting=20\r\n",
    "\t• Dropout rate= 0.2\r\n",
    "\t• Epoch = dynamic\r\n",
    "\t• Early dropout\r\n",
    "\t• Weight used\r\n",
    "\t• With normalizati\t• on\r\n",
    "\t• With tabular data.\r\n",
    "Result:\r\n",
    "\t•\t•  Accuracy: 0.5386037910309754\r",
    "Preci\t• sion (Micro): 0.6869958050984188\r",
    "Reca\t• ll (Micro): 0.7600856836843984\r",
    "F1 \t• Score (Micro): 0.7216949152542375\r",
    "Hamming Loss: 0.1\n",
    "\t• 82616736014795\r",
    "Auc Roc:\n",
    "vertrained. But the quality of these parameters aren't that good.\r\n",
    "\r\n",
    "\r\n",
    "\n",
    "\n",
    "ct.(2).ch."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fc4af0b6-0dd6-44b3-832b-538241a1ae66",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "42ad0041-dd55-47b7-88f7-a3d566d8a3a9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d9c5975d-6a86-4cf6-8ca5-172ad91cbaf6",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
